C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串类特殊的控制字符 (control character) : • 0 表示空字符(‘ \0’ ) • 9 表示 Tab 制表符(‘ \t’ ) • 10 表示换行(‘ \n’ ) • 13 表示回车(‘ \r’ ) • 27 表示 ESC 键(‘ \x1b’ ) • 127 表示 DEL 键(‘ \x7f’ )等 • 0~31 和 127 这些整数,就构成了 ASCII 码中控制字符的部分。 码中控制字符的部分。 关于控制字符的一个冷知识 • 在 Linux 命令行中启动 cat 。 • 试试按 Ctrl+R , Ctrl+E , Ctrl+C 等一系列 组合键,看到出现了什么? • 可以看到显示的字符变成了 ^R ^E ^C 等… … • 这是 Unix 类系统显示控制字符的一种方式 。 • 众所周知,我们常用 Ctrl+C 来发送中断信号 ( SIGINT )强制终止程序,这时常常会看到 )强制终止程序,这时常常会看到 一个 ^C 的字样,就是这样出现的。这里我 们的 cat 程序收到 ^C 以后,就直接终止退 出了。 关于控制字符的一个冷知识 • 除此之外,因为 ^D 是“传输终止符”,还可以在控制 台输入 Ctrl+D 来关闭标准输入流,终止正在读取他 的程序。 • 小彭老师常用 Ctrl+D 来快速关闭一个 shell (和输入 exit 命令的效果一样)。 • 以及按 Ctrl+I 的效果其实和0 码力 | 162 页 | 40.20 MB | 1 年前3
Zadig 面向开发者的云原生 DevOps 平台数据变更 xN 代码变更 xN 配置变更 xN 部署测试环境 xN 部署预发环境 xN 部署生产环境 xN 部署 / 灰度上线 xN 监控 / 告警 xN 版本归档 xN 交付追踪 xN 数据度量 xN 服务、工单管理 事件、缺陷管理 想 法 用 户 运行阶段 需求阶段 研发阶段 现代软件交付挑战:开发 5 分钟,上线 2 企业解决方案和最佳实践内置 发布 AI 增强解决方案 企 业 开 放 性 、 A I 能 力 增 强 产品发展历程 高频极速迭代: Zadig 开源 29 个月共迭代 21 个版本 “ ” 开发者常处于 今天发版、明早升级 嗷嗷待哺状态 Zadig 优势、使用场景、解决问题域 Zadig 解决问题域 Zadig 云原生开放性:极简、 0 负担接入 Zadig 业务架构 迭代进度一目了然 项目从无到有可核算 管理有数据科学依据 解放管理,更多时间花在 业务创新 平台运维 业务压力大,能力建设缓慢: • 大量工作花在工具链维护 • 项目间依赖复杂,环境管理难 • 交付版本依赖工单,发布风险高 • 公共资源 / 业务资源利用率低 赋能多业务:一个平台解决了多异构项目的管理和规范 团队高效协作:定义团队角色工作流模板,随时可用云上环境 价值清晰呈现:为管理者提供全视角效能数据,赋能数字决策0 码力 | 59 页 | 81.43 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南src 目录下 。 第 2 章:项目配置变量 CMAKE_BUILD_TYPE 构建的类型,调试模式还是发布模式 • CMAKE_BUILD_TYPE 是 CMake 中一个特殊的变量,用于控制构建类型,他的值可以 是: • Debug 调试模式,完全不优化,生成调试信息,方便调试程序 • Release 发布模式,优化程度最高,性能最佳,但是编译比 Debug 慢 • MinSizeRel Fortran :老年人的编程语言 • CUDA :英伟达的 CUDA ( 3.8 版本新增) • OBJC :苹果的 Objective-C ( 3.16 版本新增) • OBJCXX :苹果的 Objective-C++ ( 3.16 版本新增) • ISPC :一种因特尔的自动 SIMD 编程语言( 3.18 版本新增) • 如果不指定 LANGUAGES ,默认为 C 和 CXX 。 https://cmake VERSION x.y.z) 可以把当前项目的版本号设定为 x.y.z 。 • 之后可以通过 PROJECT_VERSION 来获取当前项目的版本号。 • PROJECT_VERSION_MAJOR 获取 x (主版本号)。 • PROJECT_VERSION_MINOR 获取 y (次版本号)。 • PROJECT_VERSION_PATCH 获取 z (补丁版本号)。 一些没什么用,但 CMake0 码力 | 166 页 | 6.54 MB | 1 年前3
新一代分布式高性能图数据库的构建 - 沈游人同事 / 一致行动 人 / 担保同地址 / 同设备登 陆 /... 已签署 / 过期签署 / 意向签署 /... 已签署 / 过期签署 / 意向签署 /... 董监高 / 就职 / 实际控制人 拥有 / 抵押 / 质 押 股权 / 资管计划 / 资金往来 / 担 保 / 借贷 / 集团 / 控股 / 上下 游 ... 父子 / 组合 / 继承 转账 / 大额转账 / 频繁转 使用图数据库的查询语言进行点边的关联查询,可以快速完成传统数据库难以完成的 多度点边关 联 当前图的典型应用场景 路径识别 群体挖掘 节点识别 相似节点 链接预测 连接强度 一致行动人 同事关系 实际控制人 可能认识的人 上下游 同爱好的人 亲属关系 … 人与人、企业与企业、企业与人之间的 复杂、潜在关系推导和挖掘 为已有的分析模型增加“关系特征”维 度 客户贡献度 客户信用分 服务采用主备架 构,基于 Raft 算法实现租约,进行 服务多活,保证图库不会出现单点 故障。 Raft 服务高可用方案 偏向分析型的分布式事务 【 MVOCC 事务提交】 基于多版本乐观并发控制技术的分布式事 务实现,在保障一致性的前提下,提供优 秀的分析性能 分布式事务技术方案 MVOCC 处理流程 全面的算法支持 覆盖全部常用算法 • 路径计算、社区检测、相似度计算0 码力 | 38 页 | 24.68 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化新读取到缓存,反而更低效。 • 因此,仅当这些情况: 1. 该数组只有写入,之前完全没有读取过 。 2. 之后没有再读取该数组的地方。 • 才应该用 stream 指令。 4 倍矢量化的版本: _mm_stream_ps • _mm_stream_si32 可以一次性写入 4 字 节到挂起队列。而 _mm_stream_ps 可以 一次性写入 16 字节到挂起队列,更加高 效了。 _mm_malloc(n, aalign) 可以分配对齐 到任意 a 字节的内存。他在这个头文件里。是 x86 特有的,并且需要通 过 _mm_free 来释放。 • 还有一个跨平台版本(比如用于 arm 架构) 的 aligned_alloc(align, n) ,他也可以分配对 齐到任意 a 字节的内存,通过 free 释放。 • 利用他们可以实现分配对齐到页面( 4KB 大小,这样即使索引小于 0 或大于 n 也不会越界。 ndarray :解决访问越界问题 • 我们采用了“索性分配更大数组”的办法。 • 因此我们现在给 ndarray 的模板加了一个 额外参数,用来控制边界层的大小。 • 这里我们的图像模糊操作需要向外扩张访 问 8 个元素,因此需要把 a 的边界层大小 声明为 8 ,即 ndarray<2, float, 8> 。 ndarray :解决起始地址对齐问题 0 码力 | 147 页 | 18.88 MB | 1 年前3
Rust分布式账务系统 - 胡宇C 在不同分区执行一个事务的 TCC 转账计划 ● 转账计划 ○ 有向无环图 ○ 节点是一个任务 ○ 边是依赖关系 ● 事务层 Marker 负责执行计划 ○ ACID 保证 ○ 依赖控制 ○ 条件执行 ○ 调度账户变动请求 跨分区转账 分布式账务系统 拥抱开源 github: https://github.com/airwallex/Auticuro doc: https://airwallex JetBrains + Rust 插件 Gitlab CI/CD 心路历程 真刀实枪 – 文档工具 文档生成 CI/CD git page 作为文档 心路历程 吐槽点 ● Nightly 版本编译器: tikv , raft-rs ● 无官方库,官方库支持不成熟 ○ Kafka (第三方: https://github.com/kafka-rust/kafka-rust) ○ PostgreSQL0 码力 | 27 页 | 12.60 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅ails/111681426 详见 https://www.bilibili.com/video/BV1fa411r7zp 的 1:18:48 上一课的案例代码:基于标准库 基于 TBB 的版本:任务组 • 用一个任务组 tbb::task_group 启动多个 任务,一个负责下载,一个负责和用户交 互。并在主线程中等待该任务组里的任务 全部执行完毕。 • 区别在于,一个任务不一定对应一个线程 运行结果 刚才的 BENCHMARK_MAIN 自动生成了一个 main 函数 ,从而生成一个可执行文件供你运行。运行后会得到测试 的结果打印在终端上。 命令行参数 他还接受一些命令行参数来控制测试的输出格式为 csv 等等,你可以调用 --help 查看更多用法。 CMake 中使用: find_package CMake 中使用:作为子模块 这个什么“勾勾”公司非要默认开启 tests0 码力 | 116 页 | 15.85 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程生成两份源码级不同的 代码。 __CUDA_ARCH__ 是个版本号 • 其实 __CUDA_ARCH__ 是一个整数,表 示当前编译所针对的 GPU 的架构版本号 是多少。这里是 520 表示版本号是 5.2.0 ,最后一位始终是 0 不用管,我们 通常简称他的版本号为 52 就行了。 • 这个版本号是编译时指定的版本,不是运 行时检测到的版本。编译器默认就是最老 的 52 ,能兼容所有 GTX900 CMake 设置架构版本号 • 可以用 CMAKE_CUDA_ARCHITECTURES 这个变量 ,设置要针对哪个架构生成 GPU 指令码。 • 小彭老师的显卡是 RTX2080 ,他的版本号是 75 ,因 此最适合他用的指令码版本是 75 。 • 如果不指定,编译器默认的版本号是 52 ,他是针对 GTX900 系列显卡的。 • 不过英伟达的架构版本都是向前兼容的,即版本号为 75 的 RTX2080 也可以运行版本号为 52 的指令码,虽然 不够优化,但是至少能用。也就是要求:编译期指定的 版本 ≤ 运行时显卡的版本。 CMAKE_CUDA_ARCHITECTURES 会自动转换成 --gpu-code 等编 译 flag 版本号不要太新了 • 比如这里设置了 RTX3000 系列的架构版 本号 86 ,在 RTX2080 上就运行不出结 果。 • 最坑的是他不会报错!也不输出任何东西0 码力 | 142 页 | 13.52 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南分别在各自的目录下有自己的 CMakeLists.txt 。 二、根项目的 CMakeLists.txt 配置 • 在根项目的 CMakeLists.txt 中,设置了默 认的构建模式,设置了统一的 C++ 版本 等各种选项。然后通过 project 命令初始 化了根项目。 • 随后通过 add_subdirectory 把两个子项 目 pybmain 和 biology 添加进来(顺序 无关紧要),这会调用 Qt5.12.1 ,你设置了环 境变量 Qt5_DIR=/opt/Qt5.12.1 ,后来又搞了个 B 项目依赖 Qt5.10.3 ,但是你忘了你设置过全 局的环境变量指向 5.12.1 了,导致版本冲突。 • 单项目有效(写死在 CMakeLists.txt )虽然方便了你,但是你的 CMakeLists.txt 拿到别人电脑 上(例如你通过 GitHub 开源的),可能你 set(Qt5_DIR D:/Qt5.12.1 。 • 则你会看到他下面有几个子目录: • D:/Qt5.12.1/msvc2017_64 (由 VS2017 编译 64 位版本) • D:/Qt5.12.1/mingw_64 (由 MinGW 编译 64 位版本) • 这几个目录里又分别包含: • D:/Qt5.12.1/msvc2017_64/include/qt/QtCore/qstring.h (实际的头文件,属于0 码力 | 56 页 | 6.87 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理// 拷贝赋值 • 追求性能时推荐用拷贝构造,因为可以避免一次无参构造,拷贝赋值是出于需要临时修改 对象的灵活性需要。 • 这个函数同样可以由 = delete 和 = default 控制是否默认生成。 • 注: return *this 是为了支持连等号 a = b = c; 编译器自动生成的函数:全家桶 • 其实,除了拷贝构造和拷贝赋值,编译器会自动生成的特殊函数还有这些: 请根据你的具体情况,决定要选用哪一种 解决方案。 移交控制权后仍希望访问到 p 指向的对象 • 解决方案 2 中,有时候我们会遇到移交控 制权后,仍希望访问到对象的需求。 • 如果还是用 p 去访问的话,因为被移动构 造函数转移了, p 已经变成空指针,从而 出错。 解决方案:提前获取原始指针 • 最简单的办法是,在移交控制权给 func 前,提前通过 p.get() 获取原始指针: int> ),则其实可以按值传递: • glm::vec3 calculateGravityAt(glm::vec3 pos); • 如果是智能指针(比如 shared_ptr ),且需要生命周期控制权,则按值传递: • void addObject(std::shared_ptr0 码力 | 96 页 | 16.28 MB | 1 年前3
共 27 条
- 1
- 2
- 3













