 C++高性能并行编程与优化 -  课件 - 11 现代 CMake 进阶指南CMake 。 • 现代 CMake 和古代 CMake 相比,使用 更方便,功能更强大。 为什么要学习现代 CMake ? 现代 CMake : 古代 CMake : 第 0 章:命令行小技巧 传统的 CMake 软件构建 / 安装方式 • mkdir build • cd build • cmake .. • make -j4 • sudo make install 目录再切换进去再指定源码目录的麻烦。 • cmake --build build 统一了不同平台( Linux 上会调用 make , Windows 上调用 devenv.exe ) • 结论:从现在开始,如果在命令行操作 cmake ,请使用更方便的 -B 和 --build 命令。 // 在源码目录用 -B 直接创建 build 目录并生成 build/Makefile // 自动调用本地的构建系统在 build 因此,如果发现一个项目里的 add_library 都是无参数的,意味着你可以用 : cmake -B build -DBUILD_SHARED_LIBS:BOOL=ON 来让他全部生成为动态库。稍后会详解命令行传递变量的规则。 小技巧:设定一个变量的默认值 要让 BUILD_SHARED_LIBS 默认为 ON ,可以用下图这个方法: 如果该变量没有定义,则设为 ON ,否则保持用户指定的值不变。 这样当用户没有指定0 码力 | 166 页 | 6.54 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 11 现代 CMake 进阶指南CMake 。 • 现代 CMake 和古代 CMake 相比,使用 更方便,功能更强大。 为什么要学习现代 CMake ? 现代 CMake : 古代 CMake : 第 0 章:命令行小技巧 传统的 CMake 软件构建 / 安装方式 • mkdir build • cd build • cmake .. • make -j4 • sudo make install 目录再切换进去再指定源码目录的麻烦。 • cmake --build build 统一了不同平台( Linux 上会调用 make , Windows 上调用 devenv.exe ) • 结论:从现在开始,如果在命令行操作 cmake ,请使用更方便的 -B 和 --build 命令。 // 在源码目录用 -B 直接创建 build 目录并生成 build/Makefile // 自动调用本地的构建系统在 build 因此,如果发现一个项目里的 add_library 都是无参数的,意味着你可以用 : cmake -B build -DBUILD_SHARED_LIBS:BOOL=ON 来让他全部生成为动态库。稍后会详解命令行传递变量的规则。 小技巧:设定一个变量的默认值 要让 BUILD_SHARED_LIBS 默认为 ON ,可以用下图这个方法: 如果该变量没有定义,则设为 ON ,否则保持用户指定的值不变。 这样当用户没有指定0 码力 | 166 页 | 6.54 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南这时你需要手动指定一个变量告诉他在哪儿,可以是普通变量 ${Qt5_DIR} ,也可以是环 境变量 $ENV{Qt5_DIR} ,两个中只要设置了任何一个 find_package 都可以识别到。 • 变量一般通过命令行 -DQt5_DIR=”C:/Program Files/Qt5.12.1/lib/cmake/Qt5” 设置。 举例, Windows 系统, Qt5 • 例如我把 Qt5 安装到了 D:/Qt5 cmake ,那 么请你设置变量 Qt5_DIR 为 D:/Qt5.12.1/msvc2017/lib/cmake/Qt5 。有三种设置方法: • (1) 单次有效。在 configure 阶段,可以从命令行设置(注意要加引号): • cmake -B build -DQt5_DIR=”D:/Qt5.12.1/msvc2017/lib/cmake/Qt5” • (2) 全局启用。右键“我的电脑” ->“ g.cmake ,那么请你设 置变量 Qt5_DIR 为 /opt/Qt5.12.1/lib/cmake/Qt5 。有三种设置方法: • (1) 单次有效。在 configure 阶段,可以从命令行设置: • cmake -B build -DQt5_DIR=”/opt/Qt5.12.1/lib/cmake/Qt5” • (2) 全局启用。修改你的 ~/.bashrc 文件添加环境变量:0 码力 | 56 页 | 6.87 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南这时你需要手动指定一个变量告诉他在哪儿,可以是普通变量 ${Qt5_DIR} ,也可以是环 境变量 $ENV{Qt5_DIR} ,两个中只要设置了任何一个 find_package 都可以识别到。 • 变量一般通过命令行 -DQt5_DIR=”C:/Program Files/Qt5.12.1/lib/cmake/Qt5” 设置。 举例, Windows 系统, Qt5 • 例如我把 Qt5 安装到了 D:/Qt5 cmake ,那 么请你设置变量 Qt5_DIR 为 D:/Qt5.12.1/msvc2017/lib/cmake/Qt5 。有三种设置方法: • (1) 单次有效。在 configure 阶段,可以从命令行设置(注意要加引号): • cmake -B build -DQt5_DIR=”D:/Qt5.12.1/msvc2017/lib/cmake/Qt5” • (2) 全局启用。右键“我的电脑” ->“ g.cmake ,那么请你设 置变量 Qt5_DIR 为 /opt/Qt5.12.1/lib/cmake/Qt5 。有三种设置方法: • (1) 单次有效。在 configure 阶段,可以从命令行设置: • cmake -B build -DQt5_DIR=”/opt/Qt5.12.1/lib/cmake/Qt5” • (2) 全局启用。修改你的 ~/.bashrc 文件添加环境变量:0 码力 | 56 页 | 6.87 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 01 学 C++ 从 CMake 学起CMakeLists.txt 中指明 target_link_libraries(a.out OpenMP::OpenMP_CXX) 即可。 输出的可执行文件 输入的多个源文件 CMake 的命令行调用 • 读取当前目录的 CMakeLists.txt ,并在 build 文件夹下生成 build/Makefile : • > cmake -B build • 让 make 读取 build/Makefile # 与 MY_MACRO=1 等价 • target_compile_options(myapp PUBLIC -fopenmp) # 添加编译器命令行选项 • target_sources(myapp PUBLIC hello.cpp other.cpp) # 添加要编译的源文件 • 以及可以通过下列指令 add_definitions(MY_MACRO=1) # 添加一个宏定义 • add_compile_options(-fopenmp) # 添加编译器命令行选项 第三方库 - 作为纯头文件引入 • 有时候我们不满足于 C++ 标准库的功能,难免会用到一些第三方库。 • 最友好的一类库莫过于纯头文件库了,这里是一些好用的 header-only 库:0 码力 | 32 页 | 11.40 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 01 学 C++ 从 CMake 学起CMakeLists.txt 中指明 target_link_libraries(a.out OpenMP::OpenMP_CXX) 即可。 输出的可执行文件 输入的多个源文件 CMake 的命令行调用 • 读取当前目录的 CMakeLists.txt ,并在 build 文件夹下生成 build/Makefile : • > cmake -B build • 让 make 读取 build/Makefile # 与 MY_MACRO=1 等价 • target_compile_options(myapp PUBLIC -fopenmp) # 添加编译器命令行选项 • target_sources(myapp PUBLIC hello.cpp other.cpp) # 添加要编译的源文件 • 以及可以通过下列指令 add_definitions(MY_MACRO=1) # 添加一个宏定义 • add_compile_options(-fopenmp) # 添加编译器命令行选项 第三方库 - 作为纯头文件引入 • 有时候我们不满足于 C++ 标准库的功能,难免会用到一些第三方库。 • 最友好的一类库莫过于纯头文件库了,这里是一些好用的 header-only 库:0 码力 | 32 页 | 11.40 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 05 C++11 开始的多线程编程如下载一个文件,同时还要和用户交互。 • 这在 GUI 应用程序中很常见,比如浏览 器在后台下载文件的同时,用户仍然可以 用鼠标操作其 UI 界面。 没有多线程:程序未响应 • 没有多线程的话,就必须等文件下载完了 才能继续和用户交互。 • 下载完成前,整个界面都会处于“未响应”状 态,用户想做别的事情就做不了。 现代 C++ 中的多线程: std::thread • C++11 开始,为多线程提供了语言级别的 构时会自动等待全部线程执行完毕。 小彭老师快乐吐槽时间 • 多线程、异步、无阻塞、并发,能提升程序响应速度,对现实世界中的软件工程至关重要 。 • 反面教材: blender 在运行物理解算的时候,界面会卡住,算完一帧后窗口才能刷新一遍 ,导致解算过程中基本别想做事,这一定程度上归功于 opengl 原始的单线程设计。 • 正面教材: zeno 可以在解算过程中,随时拖动滑块看前几帧的结果,编辑场景图,修改0 码力 | 79 页 | 14.11 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 05 C++11 开始的多线程编程如下载一个文件,同时还要和用户交互。 • 这在 GUI 应用程序中很常见,比如浏览 器在后台下载文件的同时,用户仍然可以 用鼠标操作其 UI 界面。 没有多线程:程序未响应 • 没有多线程的话,就必须等文件下载完了 才能继续和用户交互。 • 下载完成前,整个界面都会处于“未响应”状 态,用户想做别的事情就做不了。 现代 C++ 中的多线程: std::thread • C++11 开始,为多线程提供了语言级别的 构时会自动等待全部线程执行完毕。 小彭老师快乐吐槽时间 • 多线程、异步、无阻塞、并发,能提升程序响应速度,对现实世界中的软件工程至关重要 。 • 反面教材: blender 在运行物理解算的时候,界面会卡住,算完一帧后窗口才能刷新一遍 ,导致解算过程中基本别想做事,这一定程度上归功于 opengl 原始的单线程设计。 • 正面教材: zeno 可以在解算过程中,随时拖动滑块看前几帧的结果,编辑场景图,修改0 码力 | 79 页 | 14.11 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 15 C++ 系列课:字符与字符串\x1b’ ) • 127 表示 DEL 键(‘ \x7f’ )等 • 0~31 和 127 这些整数,就构成了 ASCII 码中控制字符的部分。 关于控制字符的一个冷知识 • 在 Linux 命令行中启动 cat 。 • 试试按 Ctrl+R , Ctrl+E , Ctrl+C 等一系列 组合键,看到出现了什么? • 可以看到显示的字符变成了 ^R ^E ^C 等… … • 这是 Unix wstring_view 。 u8“ 字符” s 会得到 u8string 。 实验代码( course/15/09/a.cpp ) 实验代码( course/15/09/b.cpp ) Linux 命令行实验 Linux 命令行实验 字符串应用实战(作业) 第 10 章 课后作业 • 输入是一个文本文件 a.txt : • 1 xxx • 4 yyyyyyy • 3 zzzz • 2 wwwww •0 码力 | 162 页 | 40.20 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 15 C++ 系列课:字符与字符串\x1b’ ) • 127 表示 DEL 键(‘ \x7f’ )等 • 0~31 和 127 这些整数,就构成了 ASCII 码中控制字符的部分。 关于控制字符的一个冷知识 • 在 Linux 命令行中启动 cat 。 • 试试按 Ctrl+R , Ctrl+E , Ctrl+C 等一系列 组合键,看到出现了什么? • 可以看到显示的字符变成了 ^R ^E ^C 等… … • 这是 Unix wstring_view 。 u8“ 字符” s 会得到 u8string 。 实验代码( course/15/09/a.cpp ) 实验代码( course/15/09/b.cpp ) Linux 命令行实验 Linux 命令行实验 字符串应用实战(作业) 第 10 章 课后作业 • 输入是一个文本文件 a.txt : • 1 xxx • 4 yyyyyyy • 3 zzzz • 2 wwwww •0 码力 | 162 页 | 40.20 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 06  TBB 开启的并行编程之旅保证结果是准确的,同时不浪费太多时间 。 运行结果 刚才的 BENCHMARK_MAIN 自动生成了一个 main 函数 ,从而生成一个可执行文件供你运行。运行后会得到测试 的结果打印在终端上。 命令行参数 他还接受一些命令行参数来控制测试的输出格式为 csv 等等,你可以调用 --help 查看更多用法。 CMake 中使用: find_package CMake 中使用:作为子模块 这个什么“勾勾”公司非要默认开启0 码力 | 116 页 | 15.85 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 06  TBB 开启的并行编程之旅保证结果是准确的,同时不浪费太多时间 。 运行结果 刚才的 BENCHMARK_MAIN 自动生成了一个 main 函数 ,从而生成一个可执行文件供你运行。运行后会得到测试 的结果打印在终端上。 命令行参数 他还接受一些命令行参数来控制测试的输出格式为 csv 等等,你可以调用 --help 查看更多用法。 CMake 中使用: find_package CMake 中使用:作为子模块 这个什么“勾勾”公司非要默认开启0 码力 | 116 页 | 15.85 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程多遍,每次针对不同的架构,所以编译会 变得非常慢,生成的可执行文件也会变大 。 • 通常在自己的电脑上用时,同学们只要根 据自己显卡的指定一个版本号即可。 如果 CMakeLists.txt 里没有指定,也可以从命令行参数指定 : 版本号和商品名对照表 • 版本 52 : Quadro M6000 , GeForce 900, GTX-970, GTX-980, GTX Titan X • 版本 53 : Tegra0 码力 | 142 页 | 13.52 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程多遍,每次针对不同的架构,所以编译会 变得非常慢,生成的可执行文件也会变大 。 • 通常在自己的电脑上用时,同学们只要根 据自己显卡的指定一个版本号即可。 如果 CMakeLists.txt 里没有指定,也可以从命令行参数指定 : 版本号和商品名对照表 • 版本 52 : Quadro M6000 , GeForce 900, GTX-970, GTX-980, GTX Titan X • 版本 53 : Tegra0 码力 | 142 页 | 13.52 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 07 深入浅出访存优化。而指令缓存的大小刚好和数据缓存一样也是 192 KB 。 • 二级缓存有 256 KB , 6 个物理核心每个都有一个, 总共 1.5 MB 。 • 三级缓存由各个物理核心共享,总共 12 MB 。 通过图形界面查看拓扑结构: lstopo 根据我们缓存的大小分析刚刚的图表 • 也可以看到刚刚两个出现转折的点,也是在 二级缓存和三级缓存的大小附近。 • 因此,数据小到装的进二级缓存,则最大带 宽就取决于二级缓存的带宽。稍微大一点则0 码力 | 147 页 | 18.88 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 07 深入浅出访存优化。而指令缓存的大小刚好和数据缓存一样也是 192 KB 。 • 二级缓存有 256 KB , 6 个物理核心每个都有一个, 总共 1.5 MB 。 • 三级缓存由各个物理核心共享,总共 12 MB 。 通过图形界面查看拓扑结构: lstopo 根据我们缓存的大小分析刚刚的图表 • 也可以看到刚刚两个出现转折的点,也是在 二级缓存和三级缓存的大小附近。 • 因此,数据小到装的进二级缓存,则最大带 宽就取决于二级缓存的带宽。稍微大一点则0 码力 | 147 页 | 18.88 MB | 1 年前3
 现代C++ 教程:高速上手C++11/14/17/20辑器中, 制表符可能会被自动替换掉,请自行确保在 Makefile 中的缩进是由制表符完成的。 如果你还不知道 Makefile 的使用也没有关系,本教程中不会构建过于复杂的代码,简单的 在命令行中使用 clang++ -std=c++2a 也可以阅读本书。 如果你是首次接触现代 C++,那么你很可能还看不懂上面的那一小段代码,即: [out = std::ref(std::cout <<0 码力 | 83 页 | 2.42 MB | 1 年前3 现代C++ 教程:高速上手C++11/14/17/20辑器中, 制表符可能会被自动替换掉,请自行确保在 Makefile 中的缩进是由制表符完成的。 如果你还不知道 Makefile 的使用也没有关系,本教程中不会构建过于复杂的代码,简单的 在命令行中使用 clang++ -std=c++2a 也可以阅读本书。 如果你是首次接触现代 C++,那么你很可能还看不懂上面的那一小段代码,即: [out = std::ref(std::cout <<0 码力 | 83 页 | 2.42 MB | 1 年前3
 Hello 算法 1.0.0b1 C++版写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ZIP”直接下载代码压缩包,本地解压即可。0 码力 | 187 页 | 14.71 MB | 1 年前3 Hello 算法 1.0.0b1 C++版写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ZIP”直接下载代码压缩包,本地解压即可。0 码力 | 187 页 | 14.71 MB | 1 年前3
共 16 条
- 1
- 2













