C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南如果有多个源文件呢? 逐个添加即可 使用变量来存储 建议把头文件也加上,这样在 VS 里可以出现在“ Header Files” 一栏 使用 GLOB 自动查找当前目录下指定扩展名的文件,实现批量添加源文件 启用 CONFIGURE_DEPENDS 选项,当添加新文件时,自动更新变量 如果源码放在子文件夹里怎么办? 必须把路径名和后缀名的排列组合全部写出来吗?感觉好麻烦 大可不必!用 aux_source_directory html 常见问题: LANGUAGES 中没有启用 C 语言,但是却用到了 C 语言 解决:改成 project( 项目名 LANGUAGES C CXX) 即可 也可以先设置 LANGUAGES NONE ,之后再调用 enable_language(CXX) 这样可以把 enable_language 放到 if 语句里,从而只有某些选项开启才启用某语言之类的 设置 C++ 标准: CMAKE_CXX_STANDARD x11-in-cmake/ 设置 C++ 标准: CMAKE_CXX_STANDARD 变量 • CMAKE_CXX_EXTENSIONS 也是 BOOL 类型,默认为 ON 。设为 ON 表示启用 GCC 特有的一些扩展功能; OFF 则关闭 GCC 的扩展功能,只使用标准的 C++ 。 • 要兼容其他编译器(如 MSVC )的项目,都会设为 OFF 防止不小心用了 GCC 才有的 特性。0 码力 | 166 页 | 6.54 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程11 及以上。 • CMake 3.18 及以上。 我负责监督你学习 第 0 章: Hello, world! CMake 中启用 CUDA 支持 • 最新版的 CMake ( 3.18 以上),只需在 LANGUAGES 后面加上 CUDA 即可启用 。 • 然后在 add_executable 里直接加你 的 .cu 文件,和 .cpp 一样。 https://www.nvidia CMAKE_CUDA_SEPARABLE_COMPILATION 选 项(设为 ON ),即可启用分离声明和定义的支持。 • 不过我还是建议把要相互调用的 __device__ 函数放在 同一个文件,这样方便编译器自动内联优化(第四课讲 过)。 两种开启方式:全局有效 or 仅针对单个程序 只对 main 这个程序启用: 对下方所有的程序启用(推荐): 顺便一提, CXX_STANDARD 和 CUDA_ARCHITECTURES0 码力 | 142 页 | 13.52 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南configure 阶段,可以从命令行设置(注意要加引号): • cmake -B build -DQt5_DIR=”D:/Qt5.12.1/msvc2017/lib/cmake/Qt5” • (2) 全局启用。右键“我的电脑” ->“ 管理” ->“ 高级”添加一个环境变量 Qt5_DIR 值为 D:/Qt5.12.1/msvc2017/lib/cmake/Qt5 ,然后重启 Visual Studio (1) 单次有效。在 configure 阶段,可以从命令行设置: • cmake -B build -DQt5_DIR=”/opt/Qt5.12.1/lib/cmake/Qt5” • (2) 全局启用。修改你的 ~/.bashrc 文件添加环境变量: • export Qt5_DIR=”/opt/Qt5.12.1/lib/cmake/Qt5” ,然后重启终端。这样以后你每次构建任何 项目, find_package0 码力 | 56 页 | 6.87 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化SIMD 版 循环中的矢量化: OpenMP 强制矢量化 除了可以用 __restrict 让编译器放心做 SIMD 优化外,还可以用 OpenMP 的这条指令: 来迫使编译器无视指针别名的问题,并启用 SIMD 优化。不过你得给编译器打开 - fopenmp 这个选项。 循环中的矢量化:编译器提示忽略指针别名 • 除了可以用 __restrict , #pragma omp simd 外,对于0 码力 | 108 页 | 9.47 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅因此,最好不是按照图像大小均匀等分,而是按照工 作量大小均匀等分。然而工作量大小我们没办法提前 知道……怎么办? • 最简单的办法:只需要让线程数量超过 CPU 核心数量 ,这时操作系统会自动启用时间片轮换调度,轮流执 行每个线程。 • 比如这里分配了 16 个线程,但是只有 4 个处理器核心。 那么就会先执行 1,2,3,4 号线程,一段时间后自动切换 到 5,6,7,8 线程。当一个线程退出时候,系统就不会再0 码力 | 116 页 | 15.85 MB | 1 年前3
共 5 条
- 1













