 C++高性能并行编程与优化 -  课件 - 11 现代 CMake 进阶指南CMake 相比,使用 更方便,功能更强大。 为什么要学习现代 CMake ? 现代 CMake : 古代 CMake : 第 0 章:命令行小技巧 传统的 CMake 软件构建 / 安装方式 • mkdir build • cd build • cmake .. • make -j4 • sudo make install • cd .. • 需要先创建 build 目录 build 目录 • 在 build 目录运行 cmake < 源码目录 > 生成 Makefile • 执行本地的构建系统 make 真正开始构建( 4 进程并 行) • 让本地的构建系统执行安装步骤 • 回到源码目录 现代 CMake 提供了更方便的 -B 和 --build 指令,不同平台,统一命 令! • cmake -B build • cmake --build build 设置缓存变量。第二次配置时,之前的 -D 添加仍然会被保留。 • cmake -B build -DCMAKE_INSTALL_PREFIX=/opt/openvdb-8.0 • ↑ 设置安装路径为 /opt/openvdb-8.0 (会安装到 /opt/openvdb-8.0/lib/libopenvdb.so ) • cmake -B build -DCMAKE_BUILD_TYPE=Release • ↑0 码力 | 166 页 | 6.54 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 11 现代 CMake 进阶指南CMake 相比,使用 更方便,功能更强大。 为什么要学习现代 CMake ? 现代 CMake : 古代 CMake : 第 0 章:命令行小技巧 传统的 CMake 软件构建 / 安装方式 • mkdir build • cd build • cmake .. • make -j4 • sudo make install • cd .. • 需要先创建 build 目录 build 目录 • 在 build 目录运行 cmake < 源码目录 > 生成 Makefile • 执行本地的构建系统 make 真正开始构建( 4 进程并 行) • 让本地的构建系统执行安装步骤 • 回到源码目录 现代 CMake 提供了更方便的 -B 和 --build 指令,不同平台,统一命 令! • cmake -B build • cmake --build build 设置缓存变量。第二次配置时,之前的 -D 添加仍然会被保留。 • cmake -B build -DCMAKE_INSTALL_PREFIX=/opt/openvdb-8.0 • ↑ 设置安装路径为 /opt/openvdb-8.0 (会安装到 /opt/openvdb-8.0/lib/libopenvdb.so ) • cmake -B build -DCMAKE_BUILD_TYPE=Release • ↑0 码力 | 166 页 | 6.54 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 01 学 C++ 从 CMake 学起于是,发明了 make 这个程序,你只需写出不同文件之间的依赖关系,和生成各文件的规则。 • > make a.out • 敲下这个命令,就可以构建出 a.out 这个可执行文件了。 • 和直接用一个脚本写出完整的构建过程相比, make 指明依赖关系的好处: 1. 当更新了 hello.cpp 时只会重新编译 hello.o ,而不需要把 main.o 也重新编译一遍。 2. 能够自动并行地发起对 libigl/libigl - 各种图形学算法大合集 fmt - 使用这个神奇的格式化库 • fmt::format 的用法和 Python 的 str.format 大致相似: CMake - 引用系统中预安装的第三方库 • 可以通过 find_package 命令寻找系统中的包 / 库: • find_package(fmt REQUIRED) • target_link_libraries(myexec Boost::iostreams 7. Eigen3::Eigen 8. OpenMP::OpenMP_CXX • 不同的包之间常常有着依赖关系,而包管理器的作者为 find_package 编写的脚本(例如 /usr/lib/cmake/TBB/TBBConfig.cmake )能够自动查找所有依赖,并利用刚刚提 到的 PUBLIC PRIVATE 正确处理依赖项,比如如果你引用了 OpenVDB::openvdb0 码力 | 32 页 | 11.40 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 01 学 C++ 从 CMake 学起于是,发明了 make 这个程序,你只需写出不同文件之间的依赖关系,和生成各文件的规则。 • > make a.out • 敲下这个命令,就可以构建出 a.out 这个可执行文件了。 • 和直接用一个脚本写出完整的构建过程相比, make 指明依赖关系的好处: 1. 当更新了 hello.cpp 时只会重新编译 hello.o ,而不需要把 main.o 也重新编译一遍。 2. 能够自动并行地发起对 libigl/libigl - 各种图形学算法大合集 fmt - 使用这个神奇的格式化库 • fmt::format 的用法和 Python 的 str.format 大致相似: CMake - 引用系统中预安装的第三方库 • 可以通过 find_package 命令寻找系统中的包 / 库: • find_package(fmt REQUIRED) • target_link_libraries(myexec Boost::iostreams 7. Eigen3::Eigen 8. OpenMP::OpenMP_CXX • 不同的包之间常常有着依赖关系,而包管理器的作者为 find_package 编写的脚本(例如 /usr/lib/cmake/TBB/TBBConfig.cmake )能够自动查找所有依赖,并利用刚刚提 到的 PUBLIC PRIVATE 正确处理依赖项,比如如果你引用了 OpenVDB::openvdb0 码力 | 32 页 | 11.40 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南中则是基于定义者所在路径,优先访问定义者的作用域。这里需要 set(key val PARENT_SCOPE) 才能修改到外面的变量。 第二章:第三方库 / 依赖项配置 用 find_package 寻找系统中安装的第三方库并链接他们 find_package 命令 • 常用参数列表一览: • find_package( C++高性能并行编程与优化 -  课件 - 16 现代 CMake 模块化项目管理指南中则是基于定义者所在路径,优先访问定义者的作用域。这里需要 set(key val PARENT_SCOPE) 才能修改到外面的变量。 第二章:第三方库 / 依赖项配置 用 find_package 寻找系统中安装的第三方库并链接他们 find_package 命令 • 常用参数列表一览: • find_package(- [version] [EXACT] [QUIET] [CONFIG] find_package(Qt5) 则是会去找名为 Qt5Config.cmake 的文件。 • 这些形如 包名 + Config.cmake 的文件,我称之为包配置文件。 • Qt5Config.cmake 是你安装 Qt5 时,随 libQt5Core.so 等实际的库文件,一起装到你的 系统中去的。以我的 Arch Linux 系统为例: • 包配置文件位于 /usr/lib/cmake/Qt5/Qt5Config 包配置文件由第三方库的作者( Qt 的开发团队)提供,在这个库安装时( Qt 的安装程序 或 apt install 等)会自动放到 /usr/lib/cmake/XXX/XXXConfig.cmake 这个路径(其中 XXX 是包名),供 CMake 用户找到并了解该包的具体信息。 • /usr/lib/cmake 这个位置是 CMake 和第三方库作者约定俗成的,由第三方库的安装程序 负责把包配置文件放到这里。如果第三方库的作者比较懒,没提供 0 码力 | 56 页 | 6.87 MB | 1 年前3
 Zadig 面向开发者的云原生 DevOps 平台环境,服务编排等 Infra 的事情。 1 0 0 % 开 源 基 本 能 力 开 源 1.5 个月核心重构 65% 功能实现开源 支撑开源社区开发者环境 易 用 性 增 强 接入:安装 10 分钟以内,成功率达 90% 集成环境:支持开发者 Remote debug 工作流:效率和性能、开发者体验提升 贡献者流程建立 开 放 社 区 搭 建 2021 年 5 月 倍 解除组织 / 流程 / 系统 孤岛,打造成长型组织 企业收益分析 现存方案 典型代表 方案特点分析 Zadig 方案优势 传统 Jenkins 方案 GitLab + Jenkins + 脚本化 运行效率低,管理维护成本高 方案局限性大,安全性风险高 无法支持敏捷交付模式;手工维护成本 高,阻碍业务交付效率 面向多服务并行部署,安全发布, 0 维护负担 支撑云原生构建 / 运行环境,多云异构支持及企业 维护大量复杂的脚本 2. 在 Rancher 上手动替换版本 3. 不透明的测试环境导致大量问题 4. 为每一次部署维护一个 Chart 版本 现状 效能提升场景: 2K+ 微服务、多语言、 Helm 、 K8s 多集群 1. 开发流程 提交代码到 Feature 分支 -> GitLab-CI 自动构建打包 Chart (写一堆复杂 的脚本 ) -> ->0 码力 | 59 页 | 81.43 MB | 1 年前3 Zadig 面向开发者的云原生 DevOps 平台环境,服务编排等 Infra 的事情。 1 0 0 % 开 源 基 本 能 力 开 源 1.5 个月核心重构 65% 功能实现开源 支撑开源社区开发者环境 易 用 性 增 强 接入:安装 10 分钟以内,成功率达 90% 集成环境:支持开发者 Remote debug 工作流:效率和性能、开发者体验提升 贡献者流程建立 开 放 社 区 搭 建 2021 年 5 月 倍 解除组织 / 流程 / 系统 孤岛,打造成长型组织 企业收益分析 现存方案 典型代表 方案特点分析 Zadig 方案优势 传统 Jenkins 方案 GitLab + Jenkins + 脚本化 运行效率低,管理维护成本高 方案局限性大,安全性风险高 无法支持敏捷交付模式;手工维护成本 高,阻碍业务交付效率 面向多服务并行部署,安全发布, 0 维护负担 支撑云原生构建 / 运行环境,多云异构支持及企业 维护大量复杂的脚本 2. 在 Rancher 上手动替换版本 3. 不透明的测试环境导致大量问题 4. 为每一次部署维护一个 Chart 版本 现状 效能提升场景: 2K+ 微服务、多语言、 Helm 、 K8s 多集群 1. 开发流程 提交代码到 Feature 分支 -> GitLab-CI 自动构建打包 Chart (写一堆复杂 的脚本 ) -> ->0 码力 | 59 页 | 81.43 MB | 1 年前3
 Zadig 产品使用手册、体验丝滑接入容易、学习 使用门槛极低 现存做法大多以「单点工具 + 写脚本」或运管类平台为主, Zadig 则是面向开发者视角,中立,云原生一体化价值链平台。 与现存 DevOps 方案对比: 现存方案 典型代表 方案特点分析 Zadig 优势 传统 Jenkins 方案 GitLab + Jenkins + 脚本化 运行效率低,管理维护成本高 方案局限性大,安全性风险高 无法支持敏捷交付模式 灵活安全接入多个代码仓及周边工具链 开发 Zadig 核心特性: 运维 真正意义的持续交付:以工程师体验为核心,价值交付为理念,完成需求到发布的全路径。 测试 发布 洞察 一堆复杂脚本、维护成本极高 员工手工操作费时费力易出错 手动更新服务、手动打包、交付 付效率低下、占据大量研发时间 、研发利用率极低 环境不透明、测试效率低下、测 试有效性低、大量手工、价值难 以体现 上下游烟囱式、协作效率低、团 重启实例 Sprint 发布 测试验证 变更发布 产品规划 测试集管理—— GitLab 仓库管理 支持冒烟测试 / 接口测试 /UI 测试 / 场景测试 / 性能测试等 1. 本地编写测试脚本并针对 sit 环境本地自测 2. 没问题后提交到 GitLab 仓库 测试验证 Sprint 发布 需求开发 变更发布 产品规划 测试验证 自动化 CD 过程:合并代码后自动触发更新集成环境0 码力 | 52 页 | 22.95 MB | 1 年前3 Zadig 产品使用手册、体验丝滑接入容易、学习 使用门槛极低 现存做法大多以「单点工具 + 写脚本」或运管类平台为主, Zadig 则是面向开发者视角,中立,云原生一体化价值链平台。 与现存 DevOps 方案对比: 现存方案 典型代表 方案特点分析 Zadig 优势 传统 Jenkins 方案 GitLab + Jenkins + 脚本化 运行效率低,管理维护成本高 方案局限性大,安全性风险高 无法支持敏捷交付模式 灵活安全接入多个代码仓及周边工具链 开发 Zadig 核心特性: 运维 真正意义的持续交付:以工程师体验为核心,价值交付为理念,完成需求到发布的全路径。 测试 发布 洞察 一堆复杂脚本、维护成本极高 员工手工操作费时费力易出错 手动更新服务、手动打包、交付 付效率低下、占据大量研发时间 、研发利用率极低 环境不透明、测试效率低下、测 试有效性低、大量手工、价值难 以体现 上下游烟囱式、协作效率低、团 重启实例 Sprint 发布 测试验证 变更发布 产品规划 测试集管理—— GitLab 仓库管理 支持冒烟测试 / 接口测试 /UI 测试 / 场景测试 / 性能测试等 1. 本地编写测试脚本并针对 sit 环境本地自测 2. 没问题后提交到 GitLab 仓库 测试验证 Sprint 发布 需求开发 变更发布 产品规划 测试验证 自动化 CD 过程:合并代码后自动触发更新集成环境0 码力 | 52 页 | 22.95 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 06  TBB 开启的并行编程之旅使是单核,多线程对我也有用。 因特尔开源的并行编程库: TBB https://link.springer.com/chapter/10.1007%2F978-1-4842-4398-5_2 安装 TBB • Ubuntu: • sudo apt-get install libtbb-dev • Arch Linux: • sudo pacman -S tbb • Windows: Windows: • .\vcpkg install tbb:x64-windows • Mac OS: • .\vcpkg install tbb:x64-macos • Other: • 从源码构建安装,参考: https://blog.csdn.net/weixin_42973508/article/details/111681426 详见 https://www.bilibili.com/video/BV1fa411r7zp0 码力 | 116 页 | 15.85 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 06  TBB 开启的并行编程之旅使是单核,多线程对我也有用。 因特尔开源的并行编程库: TBB https://link.springer.com/chapter/10.1007%2F978-1-4842-4398-5_2 安装 TBB • Ubuntu: • sudo apt-get install libtbb-dev • Arch Linux: • sudo pacman -S tbb • Windows: Windows: • .\vcpkg install tbb:x64-windows • Mac OS: • .\vcpkg install tbb:x64-macos • Other: • 从源码构建安装,参考: https://blog.csdn.net/weixin_42973508/article/details/111681426 详见 https://www.bilibili.com/video/BV1fa411r7zp0 码力 | 116 页 | 15.85 MB | 1 年前3
 GPU Resource Management On JDOSgpu 的 zone , 自行设定相应的镜像即 可,有完善的周边服务 训练服务 • 提供基于 kubeflow 的分布式训练方案 – 界面化操作,用户提供代码地址和执行命令即可 – 系统内建支持安装 pip 依赖 – 自制存储插件支持分布式文件系统存储用户数据 – 支持官方镜像,不需要 JDOS 提前协助制作镜像 – 提供 tensorboard 作为训练监控实时查看训练状态 – 用户训练完成后释放0 码力 | 11 页 | 13.40 MB | 1 年前3 GPU Resource Management On JDOSgpu 的 zone , 自行设定相应的镜像即 可,有完善的周边服务 训练服务 • 提供基于 kubeflow 的分布式训练方案 – 界面化操作,用户提供代码地址和执行命令即可 – 系统内建支持安装 pip 依赖 – 自制存储插件支持分布式文件系统存储用户数据 – 支持官方镜像,不需要 JDOS 提前协助制作镜像 – 提供 tensorboard 作为训练监控实时查看训练状态 – 用户训练完成后释放0 码力 | 11 页 | 13.40 MB | 1 年前3
 基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺: GitHub 为截止 2023 年 5 月数据 TDengine 的 核 心 代 码 全 部 开 源 www.github.com/taosdata/TDengine 全球 50 多个国家安装实例超 270k | GitHub 全球趋势排行榜多次排名第一 TDengine - 数据模型 1. 设备 ID 及关联属性( Tags ) 2. 时间戳 3. 结构化采集量 STable 超级表0 码力 | 29 页 | 2.26 MB | 1 年前3 基于 Rust Arrow Flight 的物联网和时序数据传输及转换工具 霍琳贺: GitHub 为截止 2023 年 5 月数据 TDengine 的 核 心 代 码 全 部 开 源 www.github.com/taosdata/TDengine 全球 50 多个国家安装实例超 270k | GitHub 全球趋势排行榜多次排名第一 TDengine - 数据模型 1. 设备 ID 及关联属性( Tags ) 2. 时间戳 3. 结构化采集量 STable 超级表0 码力 | 29 页 | 2.26 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程cudaErrorIllegalAddress 。意思是我们访问了非法的地 址,和 CPU 上的 Segmentation Fault 差不多。 封装好了: helper_cuda.h • 其实 CUDA toolkit 安装时,会默认附带一系列案例代码, 这些案例中提供了一些非常有用的头文件和工具类,比如这 个文件: • /opt/cuda/samples/common/inc/helper_cuda.h • 把他和0 码力 | 142 页 | 13.52 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程cudaErrorIllegalAddress 。意思是我们访问了非法的地 址,和 CPU 上的 Segmentation Fault 差不多。 封装好了: helper_cuda.h • 其实 CUDA toolkit 安装时,会默认附带一系列案例代码, 这些案例中提供了一些非常有用的头文件和工具类,比如这 个文件: • /opt/cuda/samples/common/inc/helper_cuda.h • 把他和0 码力 | 142 页 | 13.52 MB | 1 年前3
共 9 条
- 1













