C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南现代 CMake 模块化项目管理指南 彭于斌( @archibate ) 课件 & 源码: https://github.com/parallel101/course 往期录播: https://space.bilibili.com/263032155 找不到头文 件怎么办呀 CMake Cookbook 小彭老师建议 : ~~-·~·~-·~ -~·-·~·- 第一章:文件 / 目录组织规范 基于 CMake 的 C/C++ 项目,如何优雅地、模块化地组织大量源文件 ? 推荐的目录组织方式 • 目录组织格式: • 项目名 /include/ 项目名 / 模块名 .h • 项目名 /src/ 模块名 .cpp • CMakeLists.txt 中写: • target_include_directories( 项目名 PUBLIC include) • 源码文件中写: #include < 项目名 / 模块名 .h> • 项目名 :: 函数名 (); 完整案例请看源码仓库: https://github.com/parallel101/course/tree/master/16/00 推荐的目录组织方式 • 头文件(项目名 /include/ 项目名 / 模块名 .h )中写: • #pragma once • namespace 项目名 { • void0 码力 | 56 页 | 6.87 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南install 这个目标,即安 装 -D 选项:指定配置变量(又称缓存变量) • 可见 CMake 项目的构建分为两步: • 第一步是 cmake -B build ,称为配置阶段( configure ),这时只检测环境并生成构建规则 • 会在 build 目录下生成本地构建系统能识别的项目文件( Makefile 或是 .sln ) • 第二步是 cmake --build build ,称为构建阶段( 目录里生成的临时 .cpp 文件也 加进来 解决方案:要么把源码统一放到 src 目录下,要么要求使用者不要把 build 放到和源码同一个目录里,我个人的建议是把源码放到 src 目录下 。 第 2 章:项目配置变量 CMAKE_BUILD_TYPE 构建的类型,调试模式还是发布模式 • CMAKE_BUILD_TYPE 是 CMake 中一个特殊的变量,用于控制构建类型,他的值可以 是: • Debug txt 开头都会有的部分,可以说是“标准模板”了。 project :初始化项目信息,并把当前 CMakeLists.txt 所在位置作为根 目录 这里初始化了一个名称为 hellocmake 的项目,为什么需要项目名? 对于 MSVC ,他会在 build 里生成 hellocmake.sln 作为“ IDE 眼中的项目”。 CMAKE_CURRENT_SOURCE_DIR 表示当前源码目录的位置,例如0 码力 | 166 页 | 6.54 MB | 1 年前3
《深入浅出MFC》2/e程序设计》)之后,陆陆续续我 收到了许多许多的大陆读者来函。其中对我的赞美、感谢、关怀、殷殷垂询, 让我非常感动。 《深入浅出MFC》2/e 早已于1998/05 于台湾出版。之所以迟迟没有授权给大 陆进行简体翻译,原因我曾于回复读者的时候说过很多遍。我在此再说一次。 1998 年中,本书之发行公司松岗(UNALIS)即希望我授权简体版,然因当时 我已在构思3/e,预判3/e 繁体版出版时,2/e 简体版恐怕还未能完成。老是让 月,我在书店看到了深入浅出MFC 这本书,让我想起自己曾经暗暗告诉过自 己:Application Framework 真是一个好东西。我在书店驻足察看这本书五分钟之后,我便知 道这本书是一定要买下的。适巧我工作上的项目进度也到了一个即将完成的阶度,所以我便 一口气将这本书给读完了,而且是彻彻底底读了两遍。 我个人特别喜欢第3章:MFC 六大关键技术之仿真。这章内容的设计的确在MFC 丛林中, 大刀阔斧地披露 C++ 和Hou 的Dissecting MFC 是通往MFC Programming 的皇家大道』。 ii 香港. lnlo@hkstart.com 我是你的一位读者,住在香港。我刚买了你翻译的Inside Visual C++ 4.0(中文版)。在此 之前我买了你的另一本书深入浅出MFC。在读了深入浅出MFC 前面50~70 页之后,我 想我错买了一本很艰深的书籍。我需要的是一本教我如何利用MFC0 码力 | 1009 页 | 11.08 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化众所周知,内存是一维的,因此任何二维数组,都必须被扁平化,才能储存在内存中。 • 对于 float a[3][4] 编译器实际上会把他变成一维数组 float a[3*4] ,然后把 a[i][j] 翻译为 a[i * 4 + j] 。 C++ 静态数组 • arraya; 可以在栈上分配有 n 个元素的一维数组。 • 通过 a[i] 访问第 i 个元素。 • array 翻译为 a[i * m + j] ,所以是列主序。 • Fortran 等非主流会把矩阵 A(i, j) 翻译为 a[i + j * n] ,所以是行主序。 • 手动扁平化时,如果用 a[i * m + j] 就是列主序。 • 手动扁平化时,如果用 a[i 倍。其中一部分是因为每个缓存 行只用到了 1/16 造成的,一部分是因为跳 跃的访存让 CPU 没有办法自动预取造成的 。 封装成 ndarray 类 ndarray.h ,同学们可以在作业或 是自己的项目里随意使用。 不要再用 Java 式的二层三层指针 了,用 ndarray<2, float> 声明一 个二维浮点数组, ndarray<3, int> 声明一个三维整型数组。 这里的 ndarray 0 码力 | 147 页 | 18.88 MB | 1 年前3
Hello 算法 1.0.0b1 C++版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 1 0. 写在前面 0.1. 关于本书 本项目致力于构建一本开源免费、新手友好的数据结构与算法入门书。 ‧ 全书采用动画图解,结构化地讲解数据结构与算法知识,内容清晰易懂、学习曲线平滑; ‧ 算法源代码皆可一键运行,支持 Java, C++ ello World!” 的回忆。 ‧ 感谢苏潼为本书设计了封面和 LOGO ,在我的强迫症下前后多次帮忙修改,谢谢你的耐心。 ‧ 感谢 @squidfunk 给出的写作排版建议,以及优秀开源项目 Material‑for‑MkDocs 。 本书鼓励“手脑并用”的学习方式,在这点上受到了《动手学深度学习》很大影响,也在此向各位同学强烈推 荐这本著作,包括中文版、英文版、李沐老师 bilibili 2.2. 行文风格约定 标题后标注 * 的是选读章节,内容相对较难。如果你的时间有限,建议可以先跳过。 文章中的重要名词会用「括号」 标注,例如「数组 Array」 。建议记住这些名词,包括英文翻译,以便后续阅 读文献时使用。 重点内容、总起句、总结句会被 加粗,此类文字值得特别关注。 专有名词和有特指含义的词句会使用“双引号” 标注,以避免歧义。 0. 写在前面 hello‑algo0 码力 | 187 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 C++版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 1 0. 写在前面 0.1. 关于本书 本项目致力于构建一本开源免费、新手友好的数据结构与算法入门书。 ‧ 全书采用动画图解,结构化地讲解数据结构与算法知识,内容清晰易懂、学习曲线平滑; ‧ 算法源代码皆可一键运行,支持 Java, C++ ello World!” 的回忆。 ‧ 感谢苏潼为本书设计了封面和 LOGO ,在我的强迫症下前后多次帮忙修改,谢谢你的耐心。 ‧ 感谢 @squidfunk 给出的写作排版建议,以及优秀开源项目 Material‑for‑MkDocs 。 本书鼓励“手脑并用”的学习方式,在这点上受到了《动手学深度学习》很大影响,也在此向各位同学强烈推 荐这本著作,包括中文版、英文版、李沐老师 bilibili 2.2. 行文风格约定 标题后标注 * 的是选读章节,内容相对较难。如果你的时间有限,建议可以先跳过。 文章中的重要名词会用「括号」 标注,例如「数组 Array」 。建议记住这些名词,包括英文翻译,以便后续阅 读文献时使用。 重点内容、总起句、总结句会被 加粗,此类文字值得特别关注。 专有名词和有特指含义的词句会使用“双引号” 标注,以避免歧义。 0. 写在前面 hello‑algo0 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.0.0b4 C++版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 1 0. 前言 0.1. 关于本书 本项目旨在创建一本开源免费、新手友好的数据结构与算法入门教程。 ‧ 全书采用动画图解,结构化地讲解数据结构与算法知识,内容清晰易懂、学习曲线平滑。 ‧ 算法源代码皆可一键运行,支持 Java, C++ 代码“Hello World!”的 美好回忆。 ‧ 感谢苏潼为本书设计了精美的封面和 LOGO,并在我的强迫症下多次耐心修改。 ‧ 感谢 @squidfunk 提供的写作排版建议,以及杰出的开源项目 Material‑for‑MkDocs 。 在写作过程中,我阅读了许多关于数据结构与算法的教材和文章。这些作品为本书提供了优秀的范本,确保 了本书内容的准确性与品质。在此感谢所有老师和前辈们的杰出贡献! 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,建议可以先跳过。 ‧ 文章中的重要名词会用「」 括号标注,例如「数组 Array」 。请务必记住这些名词,包括英文翻译,以 便后续阅读文献时使用。 ‧ 加粗的文字 表示重点内容或总结性语句,这类文字值得特别关注。 ‧ 专有名词和有特指含义的词句会使用“双引号” 标注,以避免歧义。 ‧ 涉及到编程语言之间不一致的名词,本书均以0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.0.0b5 C++版前言 � 算法犹如美妙的交响乐,每一行代码都像韵律般流淌。 愿这本书在你的脑海中轻轻响起,留下独特而深刻的旋律。 第 0 章 前言 hello‑algo.com 2 0.1 关于本书 本项目旨在创建一本开源免费、新手友好的数据结构与算法入门教程。 ‧ 全书采用动画图解,结构化地讲解数据结构与算法知识,内容清晰易懂、学习曲线平滑。 ‧ 算法源代码皆可一键运行,支持 Java、C++、 1 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,建议可以先跳过。 ‧ 专有名词和有特指含义的词句会使用“双引号” 标注,以避免歧义。 ‧ 重要专有名词及其英文翻译会用「」 括号标注,例如「数组 array」 。建议记住它们,以便阅读文献。 ‧ 加粗的文字 表示重点内容或总结性语句,这类文字值得特别关注。 ‧ 当涉及到编程语言之间不一致的名词时,本书均以 Python hello‑algo.com 371 图 16‑1 页面编辑按键 图片无法直接修改,需要通过新建 Issue 或评论留言来描述问题,我们会尽快重新绘制并替换图片。 2. 内容创作 如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request 工作流程。 1. 登录 GitHub ,将本仓库 Fork 到个人账号下。 2. 进入您的 Fork 仓库网页,使用0 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0 C++版前言 � 算法犹如美妙的交响乐,每一行代码都像韵律般流淌。 愿这本书在你的脑海中轻轻响起,留下独特而深刻的旋律。 第 0 章 前言 hello‑algo.com 2 0.1 关于本书 本项目旨在创建一本开源、免费、对新手友好的数据结构与算法入门教程。 ‧ 全书采用动画图解,结构化地讲解数据结构与算法知识,内容清晰易懂,学习曲线平滑。 ‧ 算法源代码皆可一键运行,支持 Python、 如何使用本书 � 为了获得最佳的阅读体验,建议你通读本节内容。 0.2.1 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,可以先跳过。 ‧ 重要专有名词及其英文翻译会用「」 括号标注,例如「数组 array」 。建议记住它们,以便阅读文献。 ‧ 专有名词和有特指含义的词句会使用“引号” 标注,以避免歧义。 ‧ 重要名词、重点内容和总结性语句会 加粗,这类文字值得特别关注。 request”按钮即可发起拉取请求。 图 16‑3 页面编辑按键 图片无法直接修改,需要通过新建 Issue 或评论留言来描述问题,我们会尽快重新绘制并替换图片。 2. 内容创作 如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request 工作流程。 1. 登录 GitHub ,将本书的代码仓库 Fork 到个人账号下。 2. 进入您的 Fork0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.1.0 C++ 版Abstract 算法犹如美妙的交响乐,每一行代码都像韵律般流淌。 愿这本书在你的脑海中轻轻响起,留下独特而深刻的旋律。 第 0 章 前言 hello‑algo.com 2 0.1 关于本书 本项目旨在创建一本开源、免费、对新手友好的数据结构与算法入门教程。 ‧ 全书采用动画图解,结构化地讲解数据结构与算法知识,内容清晰易懂,学习曲线平滑。 ‧ 算法源代码皆可一键运行,支持 Python、 request”按钮即可发起拉取请求。 图 16‑3 页面编辑按键 图片无法直接修改,需要通过新建 Issue 或评论留言来描述问题,我们会尽快重新绘制并替换图片。 2. 内容创作 如果您有兴趣参与此开源项目,包括将代码翻译成其他编程语言、扩展文章内容等,那么需要实施以下 Pull Request 工作流程。 1. 登录 GitHub ,将本书的代码仓库 Fork 到个人账号下。 2. 进入您的 Fork 附录 hello‑algo.com 367 3. Docker 部署 在 hello-algo 根目录下,执行以下 Docker 脚本,即可在 http://localhost:8000 访问本项目: docker-compose up -d 使用以下命令即可删除部署: docker-compose down 16.3 术语表 表 16‑1 列出了书中出现的重要术语,值得注意以下几点。0 码力 | 379 页 | 18.47 MB | 1 年前3
共 19 条
- 1
- 2













