C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南目录 • 在 build 目录运行 cmake < 源码目录 > 生成 Makefile • 执行本地的构建系统 make 真正开始构建( 4 进程并 行) • 让本地的构建系统执行安装步骤 • 回到源码目录 现代 CMake 提供了更方便的 -B 和 --build 指令,不同平台,统一命 令! • cmake -B build • cmake --build build -j4 会让生成出来可执行文件的 RPATH 字段指向他链 接了的 .so 文件所在目录,运行时会优先从 RPATH 里找链接库,所以即使不在同目录也 能找到。 • 所以还有第三种解决方案:微软,我卸卸你全家(指卸载)。然后安装 Arch Linux 系统 。 • 需要手动修改或查看一个 ELF 文件的 RPATH ,可以用 chrpath 或 patchelf 命令。 yyds 第 5 章:链接第三方库0 码力 | 166 页 | 6.54 MB | 1 年前3
Zadig 产品使用手册CI 过程,包括单元 测试,代码风格 检查、代码扫描 。 Sprint 发布 测试验证 变更发布 产品规划 需求开发 单个工程师自测——手工 / 自动触发 dev 工作流执行 步骤包含: dev 环境构建 -> 部署 -> 冒烟测试 ->IM 通知 Sprint 发布 测试验证 变更发布 产品规划 需求开发 Sprint 发布 测试验证 变更发布 产品规划 产品规划 测试验证 自动化 CD 过程:合并代码后自动触发更新集成环境 包括步骤: auto-sit 环境构建 -> 部署 -> 场景测试 -> 安全扫描 ->IM 通知 Sprint 发布 需求开发 变更发布 产品规划 测试验证 sit 发布——执行 sit 工作流更新环境进行集成验证 包括步骤:构建 -> 部署 sit 环境 -> 接口测试 -> IM 通知 Sprint 发布 产品规划 测试验证 uat 发布——执行 uat 工作流做预发布验证 步骤包含:质量门禁 -> 构建 ->nacos 变更 -> 部署 uat 环境 -> 回归测试 ->IM 通知 Sprint 发布 需求开发 变更发布 产品规划 变更发布 生产环境发布——滚动发布, 执行 prod 工作流更新生产环境 步骤包含:发布审批 -> nacos 变更 -> 部署 Sprint 发布0 码力 | 52 页 | 22.95 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅且每个 step 后依然写回了数组,数据缓存没法充分利用 。 另辟蹊径:流水线并行 加速比: 6.73 倍 反直觉的并行方式,但是加速效果却很理想,为什么? 流水线模式下每个线程都只做自己的那个步骤( filter ),从 而对指令缓存更友好。且一个核心处理完的数据很快会被另一 个核心用上,对三级缓存比较友好,也节省内存。 且 TBB 的流水线,其实比教科书上描述的传统流水线并行更加优化: 他在 细节。 流水线并行: filter 参数 • serial_in_order 表示当前步骤只允许串行执行,且 执行的顺序必须一致。 • serial_out_of_order 表示只允许串行执行,但是顺 序可以打乱。 • parallel 表示可以并行执行当前步骤,且顺序可以 打乱。 • 每一个步骤( filter )的输入和返回类型都可以不一 样。要求:流水线上一步的返回类型,必须和下一 filter 可以 和他同时并行运行。这可以应对一些不方便并行,或 者执行前后的数据有依赖,但是可以拆分成多个步骤 ( filter )的复杂业务。 • 还有好处是他无需先把数据全读到一个内存数组里, 可以流式处理数据( on-fly ),节省内存。 • 不过需要注意流水线每个步骤( filter )里的工作量最 好足够大,否则无法掩盖调度 overhead 。 总结:各种并行模式 •0 码力 | 116 页 | 15.85 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器find(X) 首先从根节点开始寻找。 • 若 X == 当前节点,则这个节点就是我要找的,返回指向该节点的迭代器; • 若 X < 当前节点,则移动左子节点,继续重复以上步骤; • 若 X > 当前节点,则移动右子节点,继续重复以上步骤; • 若已经没有子节点了,但仍未找到 X ,则说明 X 在集合中不存在,返回 end() 来表示。 1 4 5 8 7 小 大 ← 根节点 set 查找为什么高效0 码力 | 90 页 | 8.76 MB | 1 年前3
Rust与算法 - 谢波为什么需要抽象数据类型? 时空复杂度 • 时间复杂度更被看重 • 时间和空间复杂度不是对立的,可以协同 时间和空间复杂度 复杂度计算 • 大O标记法(数量级近似) • 用 AI 来估计 算步骤、算存储 Rust 基本数据结构复杂度 线性数据结构 非线性数据结构 总体来看,时间复杂度没有超过 O(n) 的! Rust 实现数据结构 • 栈 • 链表 • Vec Rust 实现数据结0 码力 | 28 页 | 3.52 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起#include “hello.h” 。然后用一个小程序,自动在编译前把引号 内的文件名 hello.h 的内容插入到记号所在的位置,这样不就只用编辑 hello.h 一次了嘛 ~ • 后来,这个编译前替换的步骤逐渐变成编译器的了一部分,称为预处理阶段, #define 定 义的宏也是这个阶段处理的。 • 此外,在实现的文件 hello.cpp 中导入声明的文件 hello.h 是个好习惯,可以保证当0 码力 | 32 页 | 11.40 MB | 1 年前3
共 6 条
- 1













