Rust 异步并发框架在移动端的应用 - 陈明煜
chenmingyu4@huawei.com 华为 公共开发部 嵌入式软件能力中心 本科就读加州大学圣地亚哥分校,毕业时长两年半, Rustacean 在 华为 目前正在使用 Rust 开发并行调度框架等模块。 Rust 异步并发框架在移动端的应用 陈明煜 chenmingyu4@huawei.com 华为 公共开发部 嵌入式软件能力中心 Applications of Rust Runtime0 码力 | 25 页 | 1.64 MB | 1 年前3Zadig 面向开发者的云原生 DevOps 平台
发布 AI 增强解决方案 企 业 开 放 性 、 A I 能 力 增 强 产品发展历程 高频极速迭代: Zadig 开源 29 个月共迭代 21 个版本 “ ” 开发者常处于 今天发版、明早升级 嗷嗷待哺状态 Zadig 优势、使用场景、解决问题域 Zadig 解决问题域 Zadig 云原生开放性:极简、 0 负担接入 Zadig 业务架构 Zadig 系统架构 1 Zadig Zadig 行业方案 对比分析 职能 传统 DevOps 方案 ZadigX 云原生 DevOps 方案 降本提效 组织能力提升 业务负责人 研发不透明,规划凭感觉: • 发版时间靠运气 • 团队熬夜冲进度 研发透明化:不同项目清晰可见的效率、质量、进度 进度管理:根据团队客观数据,预测和确定项目规划 迭代进度一目了然 项目从无到有可核算 管理有数据科学依据 解放管理,更多时间花在 可部署到任何环境 简 化 对 客 户 的 本 地 、 私 有 云 、 离 线 环 境 的 产 品 发 布 、 许 可 和 支 持 的 管 理 产品各版本功能差异 基础版注重工程师体验,专家版保障稳定可靠高效发布;企业版安全发布、数据运营及企业扩展定制 3 Zadig 平台工程模式及 应用场景、架构解析 开发者自服务 • 通过自服务的方式来加快发布速 度,无需与运维持续沟通 降低个人心智负担0 码力 | 59 页 | 81.43 MB | 1 年前3基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺
Visualization Tool Grafana Web Based Management Tool 21,400+ 4,600+ 18,500+ 社区版开源 2019.07.12 集群版开源 2020.08.03 云原生版开源 2022.08.13 注 : GitHub 为截止 2023 年 5 月数据 TDengine 的 核 心 代 码 全 部 开 源 www.github `voltage` INT, `phase` FLOAT) TAGS ( `groupid` INT, `location` VARCHAR(24)) TDengine - 业务模式 开源版 企业版 云服务版 核心功能开源 • SQL 支持 • 无模式写入 • 缓存 • 流计算 • 数据订阅 • 集群、高可用 高可靠、线性扩展 + 专业技术服务 • 边云数据复制 • 跨云 /0 码力 | 29 页 | 2.26 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器
range-based loop 语法支持引用,也非常简单: • for (auto &[k, v]: m) { • v = v2; // 引用比指针还方便,自动解引用。此处等价于迭代器版的 (*it).second = v2; • } map 的遍历:如果要修改,请你加引用 k v map 中的 堆空间 执行你这段代码 的栈空间 v2 要写入的数 执行中的代码 for range-based loop 语法支持引用,也非常简单: • for (auto &[k, v]: m) { • v = v2; // 引用比指针还方便,自动解引用。此处等价于迭代器版的 (*it).second = v2; • } map 的遍历:如果要修改,请你加引用 k v map 中的 堆空间 执行你这段代码 的栈空间 v2 要写入的数 执行中的代码 for range-based loop 语法支持引用,也非常简单: • for (auto &[k, v]: m) { • v = v2; // 引用比指针还方便,自动解引用。此处等价于迭代器版的 (*it).second = v2; • } map 的遍历:如果要修改,请你加引用 k v map 中的 堆空间 执行你这段代码 的栈空间 v2 要写入的数 执行中的代码 for0 码力 | 90 页 | 8.76 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化
如果没有重叠,则跳转到 SIMD 版本高效运行。 2. 如果重叠,则跳转到标量版本低效运行,但至少不会错。 SIMD 版 标量版 循环中的矢量化:解决指针别名 所以,让我们加上 __restrict 关键字,打消编译器的顾虑! 这下只需要生成一个 SIMD 版本了,没有了运行时判断重叠的焦虑。 SIMD 版 循环中的矢量化: OpenMP 强制矢量化 除了可以用 __restrict 让编译器放心做 SIMD 测试一下加速了多少倍? 优化前: 优化后: 测试结果 SOA + unroll 的方案,比优化前快了 5 倍 ! 并行情况下最快的也是 SOA 。 单线程的 SOA + unroll 甚至略微超过了并 行版的 AOS !可见 OpenMP 并非万能膏 药,单线程的程序认真优化后一样打败无脑 并行。 结论: SOA 是针对这个案例最高效的数据排布格式 第 7 章: STL 容器 std::vector0 码力 | 108 页 | 9.47 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南
/usr/lib/cmake/Qt5/Qt5Config.cmake 。 • 但是假如我的库不是装在这些标准路径,而是我自定义的路径,怎么办? • 而且即使你不自定义安装路径, Windows 版的 Qt 默认安装就会安装到: • C:/Qt5.12.1/msvc2017_64/lib/cmake/Qt5/Qt5Config.cmake 。 • 何况我们同学有的还喜欢装到 D 盘去, Windows (实际的静态库文件,对应 Qt5::Core ) • D:/Qt5.12.1/msvc2017_64/lib/cmake/Qt5/Qt5Config.cmake (包配置文件) • 可以看到尽管是 Windows 版的 Qt ,他内部仍然是在模仿 Linux 下 /usr 的目录组织格式。 • 注意这里的 Qt5Core.dll 位于 bin 目录,而不是 lib 目录,这是为什么呢? • 因为 Windows 称为主版本号,出现功能重大变更,以至于和旧 API 不兼容的时候会增加该号。 • minor 称为次版本号,功能有所变更或增加,但依然和旧的 API 兼容时会增加该号。 • patch 称为补丁版号,功能没有改变,只是修复了一些 bug 就重新发布时会增加该号。 • 也有的软件不拘一格(例如我们的 zeno ),索性用发布的日期作为版本号的三个数字, 例如 2022.11.2 。不论采用哪0 码力 | 56 页 | 6.87 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型
32 位的 float ,不能更小了。 • 那么有没有不用定点数就能减小浮点数占用空间的存储方式,比如 16 位浮点呢? double: float: 更小的浮点类型: float16 (大底数版) • 这就是 half 类型,他只有 5 位指数, 10 位底 数,总共占据 16 位,所以又称 float16 。精度很 低,但是节省内存空间! • 然而只有 GPU (比如 CUDA )支持 因此需要我们手写一些位运算,在 float 和 half 之间转换,然后用 int16_t 来存储。double: float: float16: 转换起来简单一点的: bfloat16 (大指数版) • 另一种简单的方法,就是直接暴力地把 32 位浮 点从 16 位切断,只取出高 16 位,当做一种非 标准的 half 来存储。称为 bfloat16 (前面多个 b )。 • 因为 bfloat160 码力 | 102 页 | 9.50 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程
RTX3000 系列的架构版 本号 86 ,在 RTX2080 上就运行不出结 果。 • 最坑的是他不会报错!也不输出任何东西 !就像没有那个 kernel 一样!所以一定 要注意调对你的版本号。否则就会这样 kernel 好像没有执行过一样,只有 CPU 上的代码被执行了。 指定多个版本号 • 可以指定多个版本号,之间用分号分割。 • 运行时可以自动选择最适合当前显卡的版 本号,通常用于打包发布的时候。0 码力 | 142 页 | 13.52 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串
LoadLibraryW 系列函数需要用: const wchar_t * , UTF-16 编码的字符串。 • 在调用中文版 Windows 的 LoadLibraryA 系列函数需要用: const char * , GBK 编码的字符串。 • 在调用英文版 Windows 的 LoadLibraryA 系列函数需要用: const char * , UTF-8 编码的字符串。0 码力 | 162 页 | 40.20 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 14 C++ 标准库系列课 - 你所不知道的 set 容器
的排序函子能否有状态(有捕获变量的 lambda 表达 式) • emplace , emplace_hint , try_emplace 有什么区别? • 我需要高效去重,可 set 没法并行,有没有并行版的 set ? • 关注小彭老师不迷路,我们之后课专门讨论一下这些问题 。 感谢观看 录播稍后上传比站 课件下载: https://github.com/parallel101/course0 码力 | 83 页 | 10.23 MB | 1 年前3
共 12 条
- 1
- 2