C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南• cmake .. • make -j4 • sudo make install • cd .. • 需要先创建 build 目录 • 切换到 build 目录 • 在 build 目录运行 cmake < 源码目录 > 生成 Makefile • 执行本地的构建系统 make 真正开始构建( 4 进程并 行) • 让本地的构建系统执行安装步骤 • 回到源码目录 现代 CMake 这个目标,即安 装 -D 选项:指定配置变量(又称缓存变量) • 可见 CMake 项目的构建分为两步: • 第一步是 cmake -B build ,称为配置阶段( configure ),这时只检测环境并生成构建规则 • 会在 build 目录下生成本地构建系统能识别的项目文件( Makefile 或是 .sln ) • 第二步是 cmake --build build ,称为构建阶段( build CMAKE_BUILD_TYPE 为空字符串,这时相当于 Debug 。 各种构建模式在编译器选项上的区别 • 在 Release 模式下,追求的是程序的最佳性能表现,在此情况下,编译器会对程序做最大 的代码优化以达到最快运行速度。另一方面,由于代码优化后不与源代码一致,此模式下 一般会丢失大量的调试信息。 1. Debug: `-O0 -g` 2. Release: `-O3 -DNDEBUG` 3. MinSizeRel:0 码力 | 166 页 | 6.54 MB | 1 年前3
Hello 算法 1.0.0b1 C++版,但会引导你探索数据结构与算法的“知识地 图”,带你了解不同“地雷”的形状大小和分布位置,让你掌握各种“排雷方法”。有了这些本领,相信你可以 更加得心应手地刷题与阅读文献,逐步搭建起完整的知识体系。 书内的代码配有可一键运行的源文件,托管在 github.com/krahets/hello‑algo 仓库。动画在 PDF 内的展示 效果有限,可前往 hello‑algo.com 网页版获得更好的阅读体验。 致谢 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 12. 附录 180 12.1. 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 12.2. 一起参与创作 . 0.1. 关于本书 本项目致力于构建一本开源免费、新手友好的数据结构与算法入门书。 ‧ 全书采用动画图解,结构化地讲解数据结构与算法知识,内容清晰易懂、学习曲线平滑; ‧ 算法源代码皆可一键运行,支持 Java, C++, Python, Go, JS, TS, C#, Swift, Zig 等语言; ‧ 鼓励读者在章节讨论区互帮互助、共同进步,提问与评论一般能在两日内得到回复; 0.10 码力 | 187 页 | 14.71 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 www.hello‑algo.com 网页版以获得更优的阅读体验。 事实上,在计算机问世之前,算法和数据结构就已经存在于世界的各个角落。早期的算法相对简单,例如古 代的计数方法和工具制作步骤等。随着文明的进步,算法逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 过编程来实现它们。在此基础上,本书致力于揭示算法在复杂世界中的生动体现,展现算法之美。希望本书 能够帮助到你! i 目 录 第 00 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b2 C++版,但会引导你探索数据结构与算法的“知识地 图”,带你了解不同“地雷”的形状大小和分布位置,让你掌握各种“排雷方法”。有了这些本领,相信你可以 更加得心应手地刷题与阅读文献,逐步搭建起完整的知识体系。 书内的代码配有可一键运行的源文件,托管在 github.com/krahets/hello‑algo 仓库。动画在 PDF 内的展示 效果有限,可前往 hello‑algo.com 网页版获得更好的阅读体验。 致谢 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 12. 附录 190 12.1. 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 12.2. 一起参与创作 . 0.1. 关于本书 本项目致力于构建一本开源免费、新手友好的数据结构与算法入门书。 ‧ 全书采用动画图解,结构化地讲解数据结构与算法知识,内容清晰易懂、学习曲线平滑; ‧ 算法源代码皆可一键运行,支持 Java, C++, Python, Go, JS, TS, C#, Swift, Zig 等语言; ‧ 鼓励读者在章节讨论区互帮互助、共同进步,提问与评论一般能在两日内得到回复; 0.10 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.1.0 C++ 版注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 事实上,在计算机问世之前,算法和数据结构就已经存在于世界的各个角落。早期的算法相对简单,例如古 代的计数方法和工具制作步骤等。随着文明的进步,算法逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 过编程来实现它们。在此基础上,本书致力于揭示算法在复杂世界中的生动体现,展现算法之美。希望本书 能够帮助到你! i 目 录 第 00 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请 各位老师和同学批评指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。动画在 PDF 内的 展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 第 16 章 附录 364 16.1 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 16.2 一起参与创作 . . . 0.1 关于本书 本项目旨在创建一本开源、免费、对新手友好的数据结构与算法入门教程。 ‧ 全书采用动画图解,结构化地讲解数据结构与算法知识,内容清晰易懂,学习曲线平滑。 ‧ 算法源代码皆可一键运行,支持 Python、C++、Java、C#、Go、Swift、JavaScript、TypeScript、Dart、 Rust、C 和 Zig 等语言。 ‧ 鼓励读者在线上章节评论区互帮互助、0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.0.0b5 C++版,但会引导你探索数据结构与算法的“知 识地图”,带你了解不同“地雷”的形状大小和分布位置,让你掌握各种“排雷方法”。有了这些本领,相信 你可以更加自如地应对刷题和阅读文献,逐步构建起完整的知识体系。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。动画在 PDF 内的 展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 第 16 章 附录 368 16.1 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 16.2 一起参与创作 . . . 2 0.1 关于本书 本项目旨在创建一本开源免费、新手友好的数据结构与算法入门教程。 ‧ 全书采用动画图解,结构化地讲解数据结构与算法知识,内容清晰易懂、学习曲线平滑。 ‧ 算法源代码皆可一键运行,支持 Java、C++、Python、Go、JS、TS、C#、Swift、Rust、Dart、Zig 等 语言。 ‧ 鼓励读者在章节讨论区互帮互助、共同进步,提问与评论通常可在两日内得到回复。0 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0b4 C++版,但会引导你探索数据结构与算法的“知 识地图”,带你了解不同“地雷”的形状大小和分布位置,让你掌握各种“排雷方法”。有了这些本领,相信 你可以更加自如地应对刷题和阅读文献,逐步构建起完整的知识体系。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。动画在 PDF 内的 展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 致谢 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 16. 附录 335 16.1. 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 16.2. 一起参与创作 . . 0.1. 关于本书 本项目旨在创建一本开源免费、新手友好的数据结构与算法入门教程。 ‧ 全书采用动画图解,结构化地讲解数据结构与算法知识,内容清晰易懂、学习曲线平滑。 ‧ 算法源代码皆可一键运行,支持 Java, C++, Python, Go, JS, TS, C#, Swift, Zig 等语言。 ‧ 鼓励读者在章节讨论区互帮互助、共同进步,提问与评论通常可在两日内得到回复。 0.10 码力 | 343 页 | 27.39 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南如果不加,在你创建新文件时, myvar 不会自动更新,还是旧的那几个文件,可能出现 undefined symbol ,需要重新运行 cmake -B build 才能更新。 • 加了,则每次 cmake --build 时自动检测目录是否更新,如果目录有新文件了, CMake 会自动帮你重新运行 cmake -B build 更新 myvar 变量。 六、头文件和源文件的一一对应关系 • 通常每个头文 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 。这样以后你每次构建任 何项目, find_package 阶段,可以从命令行设置: • 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_package 都能自动找到这个路径的0 码力 | 56 页 | 6.87 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅https://github.com/parallel101/course 高性能并行编程与优化 - 课程大纲 • 分为前半段和后半段,前半段主要介绍现代 C++ ,后半段主要介绍并行编程与优化。 1.课程安排与开发环境搭建: cmake 与 git 入门 2.现代 C++ 入门:常用 STL 容器, RAII 内存管理 3.现代 C++ 进阶:模板元编程与函数式编程 4.编译器如何自动优化:从汇编角度看 C++ CPU 实际上提供了 6GHz 的处理能力,是吗? • 显然不是。甚至在两个处理器上同时运行两个线程也不见得可以获得两倍的性能。相似的 ,大多数多线程的应用不会比双核处理器的两倍快。他们应该比单核处理器运行的快,但 是性能毕竟不是线性增长。 • 为什么无法做到呢?首先,为了保证缓存一致性以及其他握手协议需要运行时间开销。在 今天,双核或者四核机器在多线程应用方面,其性能不见得的是单核机器的两倍或者四倍。 运用多线程的方式和动机,一般分为两种。 • 并发:单核处理器,操作系统通过时间片调 度算法,轮换着执行着不同的线程,看起来 就好像是同时运行一样,其实每一时刻只有 一个线程在运行。目的:异步地处理多个不 同的任务,避免同步造成的阻塞。 • 并行:多核处理器,每个处理器执行一个线 程,真正的同时运行。目的:将一个任务分 派到多个核上,从而更快完成任务。 举个例子 • 并发:某互联网公司购置了一台单核处理 器的服务器,他正同时处理0 码力 | 116 页 | 15.85 MB | 1 年前3
共 25 条
- 1
- 2
- 3













