 C++高性能并行编程与优化 -  课件 - 02 现代 C++ 入门:RAII 内存管理• 求一个列表中所有数的和: # 参考资料 - [ 热心观众整理的学习资料 ](https://github.com/jiayaozhang/OpenVDB_and_TBB) - [C++ 官方文档 ](https://en.cppreference.com/w/) - [C++ 核心开发规范 ](https://github.com/isocpp/CppCoreGuidelines/blo bookstack.cn/read/CMake-Cookbook/README.md) - [CMake 官方文档 ](https://cmake.org/cmake/help/latest/) - [Git 官方文档 ](https://git-scm.com/doc) - [GitHub 官方文档 ](https://docs.github.com/en) 古代: C 语言 近代: C++980 码力 | 96 页 | 16.28 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 02 现代 C++ 入门:RAII 内存管理• 求一个列表中所有数的和: # 参考资料 - [ 热心观众整理的学习资料 ](https://github.com/jiayaozhang/OpenVDB_and_TBB) - [C++ 官方文档 ](https://en.cppreference.com/w/) - [C++ 核心开发规范 ](https://github.com/isocpp/CppCoreGuidelines/blo bookstack.cn/read/CMake-Cookbook/README.md) - [CMake 官方文档 ](https://cmake.org/cmake/help/latest/) - [Git 官方文档 ](https://git-scm.com/doc) - [GitHub 官方文档 ](https://docs.github.com/en) 古代: C 语言 近代: C++980 码力 | 96 页 | 16.28 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 15 C++ 系列课:字符与字符串.h • https://github.com/zenustech/zeno/blob/master/zeno/include/zeno/utils/format.h cout 支持十六进制 官方推荐用 stringstream 取代 to_string • cout 这么方便,能不能让他不要直接输出到控制台,而是把结果存到一个字 符串呢?这正是字符串流 stringstream 的作用。 ,则默认 是 C 语言的 0 结尾字符串, find 还要去求 len = strlen(“str”) , 相对低效。 find 寻找子字符串 find 应用案例:计算子字符串出现了多少次 官方文档对 find 的描述 https://en.cppreference.com/w/cpp/string/basic_string/find 反向查找 rfind • find 是从字符串头部开始查找,返回第一次出现的地方。 const char *s, size_t slen); replace 批量替换字符串 不是最高效的写法,最坏情况可达 O(mn) ,其中 m 是 “ pyb” 出现次数,如何优化?留作课后作业! 官方文档对 replace 的描述 https://en.cppreference.com/w/cpp/string/basic_string/replace 小彭老师表示: 边界情况总结 • s0 码力 | 162 页 | 40.20 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 15 C++ 系列课:字符与字符串.h • https://github.com/zenustech/zeno/blob/master/zeno/include/zeno/utils/format.h cout 支持十六进制 官方推荐用 stringstream 取代 to_string • cout 这么方便,能不能让他不要直接输出到控制台,而是把结果存到一个字 符串呢?这正是字符串流 stringstream 的作用。 ,则默认 是 C 语言的 0 结尾字符串, find 还要去求 len = strlen(“str”) , 相对低效。 find 寻找子字符串 find 应用案例:计算子字符串出现了多少次 官方文档对 find 的描述 https://en.cppreference.com/w/cpp/string/basic_string/find 反向查找 rfind • find 是从字符串头部开始查找,返回第一次出现的地方。 const char *s, size_t slen); replace 批量替换字符串 不是最高效的写法,最坏情况可达 O(mn) ,其中 m 是 “ pyb” 出现次数,如何优化?留作课后作业! 官方文档对 replace 的描述 https://en.cppreference.com/w/cpp/string/basic_string/replace 小彭老师表示: 边界情况总结 • s0 码力 | 162 页 | 40.20 MB | 1 年前3
 Rust分布式账务系统 - 胡宇开发调试部署 IDE JetBrains + Rust 插件 Gitlab CI/CD 心路历程 真刀实枪 – 文档工具 文档生成 CI/CD git page 作为文档 心路历程 吐槽点 ● Nightly 版本编译器: tikv , raft-rs ● 无官方库,官方库支持不成熟 ○ Kafka (第三方: https://github.com/kafka-rust/kafka-rust)0 码力 | 27 页 | 12.60 MB | 1 年前3 Rust分布式账务系统 - 胡宇开发调试部署 IDE JetBrains + Rust 插件 Gitlab CI/CD 心路历程 真刀实枪 – 文档工具 文档生成 CI/CD git page 作为文档 心路历程 吐槽点 ● Nightly 版本编译器: tikv , raft-rs ● 无官方库,官方库支持不成熟 ○ Kafka (第三方: https://github.com/kafka-rust/kafka-rust)0 码力 | 27 页 | 12.60 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南ig.cmake • 这些 Config 文件都是由第三方库负责安装到 /usr/lib/cmake 。 如果第三方库发懒,没有提供 Config 文件怎么办? • 但是,也有少数不听话的库,官方不提供 CMake 支持,即安装时不自带 Config 文件。 • 恼人的是,这些不听话的库有些竟然是非常热门的库!例如 Python , CUDA , Jemalloc 。 • 为了不影响 cmake • 虽然 Config 文件通常风格比较统一,都是 XXX::xxx 这种格式。但是不同的 Find 文件,特别 是这种网上志士仁人自己编写的文件,风格可能千差 万别(没办法,毕竟不是官方的支持嘛),很多都还 是古代 CMake 的用法,例如 $ {XXX_LIBRARIES} 。关于具体使用的细节可以打开 FindXXX.cmake 文件查看,他里面前半部分是注释 ,会讲解如何使用。 FindCURL.cmake 的注释,可以 看到 IMPORTED Targets 章节是在介绍现代 的用法,而 Result Variables 章节是在介绍 古代的用法,我们尽量用现代的那种就行。 官方文档: find_package 的两种模式 指定使用哪种模式 • find_package(TBB MODULE REQUIRED) • 只会寻找 FindTBB.cmake ,搜索路径: 10 码力 | 56 页 | 6.87 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南ig.cmake • 这些 Config 文件都是由第三方库负责安装到 /usr/lib/cmake 。 如果第三方库发懒,没有提供 Config 文件怎么办? • 但是,也有少数不听话的库,官方不提供 CMake 支持,即安装时不自带 Config 文件。 • 恼人的是,这些不听话的库有些竟然是非常热门的库!例如 Python , CUDA , Jemalloc 。 • 为了不影响 cmake • 虽然 Config 文件通常风格比较统一,都是 XXX::xxx 这种格式。但是不同的 Find 文件,特别 是这种网上志士仁人自己编写的文件,风格可能千差 万别(没办法,毕竟不是官方的支持嘛),很多都还 是古代 CMake 的用法,例如 $ {XXX_LIBRARIES} 。关于具体使用的细节可以打开 FindXXX.cmake 文件查看,他里面前半部分是注释 ,会讲解如何使用。 FindCURL.cmake 的注释,可以 看到 IMPORTED Targets 章节是在介绍现代 的用法,而 Result Variables 章节是在介绍 古代的用法,我们尽量用现代的那种就行。 官方文档: find_package 的两种模式 指定使用哪种模式 • find_package(TBB MODULE REQUIRED) • 只会寻找 FindTBB.cmake ,搜索路径: 10 码力 | 56 页 | 6.87 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 11 现代 CMake 进阶指南(主版本号)。 • PROJECT_VERSION_MINOR 获取 y (次版本号)。 • PROJECT_VERSION_PATCH 获取 z (补丁版本号)。 一些没什么用,但 CMake 官方不知为何就是提供了的项目字段…… 项目名的另一大作用:会设置另外 < 项目名 >_SOURCE_DIR 等变量 小技巧: CMake 的 ${} 表达式可以嵌套 因为 ${PROJECT_NAME} CMakeLists.txt 里直接改 option 是错的,官方解法是通过 -D 参 数来改 刚刚说了, option 等价于 set(... CACHE BOOL ...) 。 因此在 CMakeLists.txt 里改同样不会立即更新缓存里的值。 官方推荐做法是通过 -D 变量名 :BOOL=ON/OFF 来改缓存变量。 这是 cmake 官方认为正确的缓存更新方式,但是很多人不知道, 还是傻傻的去改 还是傻傻的去改 option 里的值,然后发现没有效果,开始怀疑 cmake 是不是出 bug 了,其实是官方宣传力度不够。 或者不要 option 了,直接用 set 加个 FORCE 即可始终强制更新缓存 当然最方便的还是删 build 大法,或者删 build/CMakeCache.txt 大法。 删 build 大法总能把缓存变量强制初始化为 CMakeLists.txt 里的值。 绕开缓存的0 码力 | 166 页 | 6.54 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 11 现代 CMake 进阶指南(主版本号)。 • PROJECT_VERSION_MINOR 获取 y (次版本号)。 • PROJECT_VERSION_PATCH 获取 z (补丁版本号)。 一些没什么用,但 CMake 官方不知为何就是提供了的项目字段…… 项目名的另一大作用:会设置另外 < 项目名 >_SOURCE_DIR 等变量 小技巧: CMake 的 ${} 表达式可以嵌套 因为 ${PROJECT_NAME} CMakeLists.txt 里直接改 option 是错的,官方解法是通过 -D 参 数来改 刚刚说了, option 等价于 set(... CACHE BOOL ...) 。 因此在 CMakeLists.txt 里改同样不会立即更新缓存里的值。 官方推荐做法是通过 -D 变量名 :BOOL=ON/OFF 来改缓存变量。 这是 cmake 官方认为正确的缓存更新方式,但是很多人不知道, 还是傻傻的去改 还是傻傻的去改 option 里的值,然后发现没有效果,开始怀疑 cmake 是不是出 bug 了,其实是官方宣传力度不够。 或者不要 option 了,直接用 set 加个 FORCE 即可始终强制更新缓存 当然最方便的还是删 build 大法,或者删 build/CMakeCache.txt 大法。 删 build 大法总能把缓存变量强制初始化为 CMakeLists.txt 里的值。 绕开缓存的0 码力 | 166 页 | 6.54 MB | 1 年前3
 谈谈MYSQL那点事一般是 innodb_buffer_pool_size 的 25% ,官方推荐是 innodb_buffer_pool_size 的 40-50%, 设置大 一点来避免在日志文件覆写上不必要的缓冲池刷新 行为 innodb_log_buffer_size 128K 64M 用来缓冲日志数据的缓冲区的大小 . 推荐是 8M , 官方推荐该值小于 16M ,最好是 1M-8M 之间  设计合理的数据表结构:适当的数据冗余 MySQL Slow Log MySQL Slow Log 分析工具 分析工具  mysqldumpslow - mysql mysqldumpslow - mysql 官方提供的慢查询日志分析 官方提供的慢查询日志分析 工具 工具  mysqlsla - hackmysql.com mysqlsla - hackmysql.com 推出的一款日志分析工具 推出的一款日志分析工具0 码力 | 38 页 | 2.04 MB | 1 年前3 谈谈MYSQL那点事一般是 innodb_buffer_pool_size 的 25% ,官方推荐是 innodb_buffer_pool_size 的 40-50%, 设置大 一点来避免在日志文件覆写上不必要的缓冲池刷新 行为 innodb_log_buffer_size 128K 64M 用来缓冲日志数据的缓冲区的大小 . 推荐是 8M , 官方推荐该值小于 16M ,最好是 1M-8M 之间  设计合理的数据表结构:适当的数据冗余 MySQL Slow Log MySQL Slow Log 分析工具 分析工具  mysqldumpslow - mysql mysqldumpslow - mysql 官方提供的慢查询日志分析 官方提供的慢查询日志分析 工具 工具  mysqlsla - hackmysql.com mysqlsla - hackmysql.com 推出的一款日志分析工具 推出的一款日志分析工具0 码力 | 38 页 | 2.04 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程,也不会漏掉几个元素。 • 这样一个 for 循环非常符合 CPU 上常见的 parallel for 的习惯,又能自动匹配不同的 blockDim 和 gridDim ,看起来非常方便。 本方法出自英伟达官方博客: https://developer.nvidia.com/blog/cuda-pro-tip-write-flexible-kernels-grid-stride-loops/ 第 4 章: world 。 • 却是小彭老师课第 5 章的结尾。 第 6 章: thrust 库 替换成 CUDA 官方提供的 thrust::universal_vector • 虽然自己实现 CudaAllocator 很有趣,也 帮助我们理解了底层原理。但是既然 CUDA 官方已经提供了 thrust 库,那就 用他们的好啦。 • universal_vector 会在统一内存上分配,0 码力 | 142 页 | 13.52 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程,也不会漏掉几个元素。 • 这样一个 for 循环非常符合 CPU 上常见的 parallel for 的习惯,又能自动匹配不同的 blockDim 和 gridDim ,看起来非常方便。 本方法出自英伟达官方博客: https://developer.nvidia.com/blog/cuda-pro-tip-write-flexible-kernels-grid-stride-loops/ 第 4 章: world 。 • 却是小彭老师课第 5 章的结尾。 第 6 章: thrust 库 替换成 CUDA 官方提供的 thrust::universal_vector • 虽然自己实现 CudaAllocator 很有趣,也 帮助我们理解了底层原理。但是既然 CUDA 官方已经提供了 thrust 库,那就 用他们的好啦。 • universal_vector 会在统一内存上分配,0 码力 | 142 页 | 13.52 MB | 1 年前3
 GPU Resource Management On JDOS自制存储插件支持分布式文件系统存储用户数据 – 支持官方镜像,不需要 JDOS 提前协助制作镜像 – 提供 tensorboard 作为训练监控实时查看训练状态 – 用户训练完成后释放 GPU 资源,提高 GPU 利用率 – Job 调度 (部门 quota 限制 + 优先级) • 创建训练 – 用户选择集群提供代码地址和执行命令即可 – 选择所用框架(镜像):支持官方,亦可自制 (提供 dockerfile0 码力 | 11 页 | 13.40 MB | 1 年前3 GPU Resource Management On JDOS自制存储插件支持分布式文件系统存储用户数据 – 支持官方镜像,不需要 JDOS 提前协助制作镜像 – 提供 tensorboard 作为训练监控实时查看训练状态 – 用户训练完成后释放 GPU 资源,提高 GPU 利用率 – Job 调度 (部门 quota 限制 + 优先级) • 创建训练 – 用户选择集群提供代码地址和执行命令即可 – 选择所用框架(镜像):支持官方,亦可自制 (提供 dockerfile0 码力 | 11 页 | 13.40 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 09 CUDA C++ 流体仿真实战CudaSurface 对象是不可 移动的,我们仍可以通过移 动其指针的方式来实现双缓 冲( std::swap )。 对流部分 对流部分:计算对流后位置( RK3 ) • 这里我参考了 Taichi 官方案例中的 stable_fluid.py 代码(二维定常流仿真),主要由 k-ye 编写 ,我学习 GAMES201 后贡献了支持 RK2 和 RK3 的版本。这里我们用高效的 CUDA 纹理对象0 码力 | 58 页 | 14.90 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 09 CUDA C++ 流体仿真实战CudaSurface 对象是不可 移动的,我们仍可以通过移 动其指针的方式来实现双缓 冲( std::swap )。 对流部分 对流部分:计算对流后位置( RK3 ) • 这里我参考了 Taichi 官方案例中的 stable_fluid.py 代码(二维定常流仿真),主要由 k-ye 编写 ,我学习 GAMES201 后贡献了支持 RK2 和 RK3 的版本。这里我们用高效的 CUDA 纹理对象0 码力 | 58 页 | 14.90 MB | 1 年前3
 应用 waPC (rust) 做软件测试工具• Sleep • now websocket standin for wasm • 可用 Javascript 在游览器里面 模拟数据 • 发 RPC 请求 • 可以上传 proto 文档 • 可以验证数据 前段链接 Wasm Mock Server 随机 waPC 注册逻辑 Use wasm without fear 支持以 websocket 代替 wasm 协议 • 不可能为每个0 码力 | 30 页 | 2.50 MB | 1 年前3 应用 waPC (rust) 做软件测试工具• Sleep • now websocket standin for wasm • 可用 Javascript 在游览器里面 模拟数据 • 发 RPC 请求 • 可以上传 proto 文档 • 可以验证数据 前段链接 Wasm Mock Server 随机 waPC 注册逻辑 Use wasm without fear 支持以 websocket 代替 wasm 协议 • 不可能为每个0 码力 | 30 页 | 2.50 MB | 1 年前3
共 14 条
- 1
- 2













