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++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串.h • https://github.com/zenustech/zeno/blob/master/zeno/include/zeno/utils/format.h cout 支持十六进制 官方推荐用 stringstream 取代 to_string • cout 这么方便,能不能让他不要直接输出到控制台,而是把结果存到一个字 符串呢?这正是字符串流 stringstream 的作用。 len ,则默认 是 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++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理的历史 • 求一个列表中所有数的和: # 参考资料 - [ 热心观众整理的学习资料 ](https://github.com/jiayaozhang/OpenVDB_and_TBB) - [C++ 官方文档 ](https://en.cppreference.com/w/) - [C++ 核心开发规范 ](https://github.com/isocpp/CppCoreGuidelines/bl 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++高性能并行编程与优化 - 课件 - 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 ,搜索路径:0 码力 | 56 页 | 6.87 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++高性能并行编程与优化 - 课件 - 09 CUDA C++ 流体仿真实战CudaSurface 对象是不可 移动的,我们仍可以通过移 动其指针的方式来实现双缓 冲( std::swap )。 对流部分 对流部分:计算对流后位置( RK3 ) • 这里我参考了 Taichi 官方案例中的 stable_fluid.py 代码(二维定常流仿真),主要由 k-ye 编写 ,我学习 GAMES201 后贡献了支持 RK2 和 RK3 的版本。这里我们用高效的 CUDA 纹理对象0 码力 | 58 页 | 14.90 MB | 1 年前3
《深入浅出MFC》2/e36 Scribble Step0~Step5 : ¡ ¨ Scribble¡ ¨ 范例之于MFC 程序设计, 几乎相当于 ¡ § Generic¡ ¨ 范例之于SDK 程序设计。微软的「官方手册」Visual C++ Class Library User's Guide 全书即以本例为主轴,介绍这个可以让你在窗口中以鼠标 左键绘图的程序。Scribble 程序共有Step1~Step7,七个阶段的所有源代码都 CMapWordToOb No Yes Yes No CMapWordToPtr No No Yes No ➀ 下表是对所有collection classes 性质的一份摘要整理(参考自微软的官方手册: Programming With MFC and Win32): 类别 C++ template Serializable Dumpable API 虛擬碼,揭露出 Windows 作業系統的運作原理。 時光漸漸過去,程式員漸漸成長,我們開始對 How 感到不足而想知道 Why 了,這就 是本書要給我們的東西。 本書不談 Windows 官方手冊㆖已有的資訊,它談「新資訊」。如何才能獲得手冊㆖沒 有記載的資訊?呵,原始碼說明㆒切。看原始碼當然是不錯,問題是 Windows 的原始 碼刻正鎖在美國 WA, Redmond(微軟公司總部所在㆞)的保險庫裡,搞不好就在比爾0 码力 | 1009 页 | 11.08 MB | 1 年前3
共 7 条
- 1













