C++高性能并行编程与优化 - 课件 - Zeno 中的现代 C++ 最佳实践
Zeno 中的现代 C++ 最佳实 践 项目地址: https://github.com/zenustech/zeno by 彭于斌( https://github.com/archibate ) Zeno 节点系统 1.0 Zeno 节点系统 2.0 • Zeno 2.0 所在的分支: https://github.com/zenustech/zeno/tree/zeno2 • Zeno 的对象,如果类型不是 T ,则出错。 NumericObject 的定义 • NumericObject 是基于 std::variant 的。 • 注意他的 get 成员函数,这和 std::get 相 比更安全,例如 value 是 int 类型,但用 户却调用了 get。则这里 is_constructible 是 true ,不会出错,而是 会自动把 float 转换成 int 0 码力 | 54 页 | 3.94 MB | 1 年前3Borsh 安全高效的二进制序列化
第三届中国 Rust 开发者大会 安全高效的二进制序列化 Daniel Wang @ NEAR Borsh • 运行、编码效率 • 确定性 • 跨平台兼容性 二进制序列化的问题 Binary Object Representation Serializer for Hashing • 字节级别确定性 • 执行速度快 Borsh • 轻量级 • 每一个对象与其二进制表示之间都存在一个双射映射0 码力 | 21 页 | 3.35 MB | 1 年前3CeresDB Rust 生产实践 任春韶
CeresDB Rust 生产实践 任春韶 CeresDB 核心开发者 蚂蚁集团技术专家 CeresDB 介绍 Rust 生产实践 - Tokio Preemption - Future Cancellation 目录 CeresDB – 历程 2018.02 2018.10 2019.02 ~ 2020.11 2021.9 自研存储引擎 1.0.0 版本发布 Preemption - Future Cancellation Rust 生产实践 生产实践 – Tokio 为什么使用 Tokio ? 1. 业界使用最广泛,测试齐全。 2. Tokio 支持 async/await ,提供了高效的异步锁、异步队列等。 3. Tokio 社区支持好。 生产实践 – Tokio Rust future preemption https://docs 生产实践 – Future 循环 Run Return https://rust-lang.github.io/async-book/04_pinning/01_chapter.html#why-pinning https://doc.rust-lang.org/beta/unstable-book/language-features/generators.html 生产实践 – Async0 码力 | 22 页 | 6.95 MB | 1 年前3Zadig 面向开发者的云原生 DevOps 平台
代码集成 xN 单元测试验证 xN 代码扫描 xN 自测、联调 xN 集成验证 xN 写测试用例 系统验证 xN 自动化测试 xN 性能测试 xN 安全测试 xN 数据变更 xN 代码变更 xN 配置变更 xN 部署测试环境 xN 部署预发环境 xN 部署生产环境 xN 部署 / 灰度上线 xN 监控 / 推出效能看板,实时客观度量工程数据指标 效 率 优 化 、 开 发 者 体 验 增 强 2023 年 面向生态伙伴开放场景 面向开发者提供 IDE 插件 / 自测环境 通用工作流广泛链接生态赋能开发者 企业解决方案和最佳实践内置 发布 AI 增强解决方案 企 业 开 放 性 、 A I 能 力 增 强 产品发展历程 高频极速迭代: Zadig 开源 29 个月共迭代 21 个版本 “ ” 开发者常处于 多业务联调艰难,诊断耗时多 • 出现问题诊断耗时多 • 流程割裂协作痛苦,响应慢 调试自测免打扰:本地 / 子环境免打扰,独立完成验证工作 自助验证更高效:自动化工作流 + 云上环境,高效验证调试 安全发布有信心: 一个平台完成日常 90% 工作,开发自助发布 需求研发总耗时降低 30% 需求迭代周期缩短 1-5 倍 解放开发,专注编码 更多的架构和技术提升 测试 效率和质量难以平衡:0 码力 | 59 页 | 81.43 MB | 1 年前3Zadig 产品使用手册
i g 软 件 工 程 平 台 是 国 内 落 地 程 度 最 深 、 使 用 范 围 最 广 ( 近 千 家 企 业 ) 的 云 原 生 D e v O p s 平 台 。 领先企业抢先实践 Zadig Zadig 研发数字化转型方案正成为产业数字化战略的核心环节 Zadig 设计思路:通过「平台工程」解决流程挑战,通过「技术升级」提升组织效能 01 04 02 03 工程化协同:“人、技术、流 释放云基建能力:链接任何云 及自建资源(容器、主机、车 机、端等),释放云原生价值 和企业创新力 生态开放:广泛开放系统 模块和 OpenAPI ,链接 一切流程、服务、工具和 上下游伙伴 安全简单自主可控:私有化 部署,现有服务 0 迁移成本 、体验丝滑接入容易、学习 使用门槛极低 现存做法大多以「单点工具 + 写脚本」或运管类平台为主, Zadig 则是面向开发者视角,中立,云原生一体化价值链平台。 DevOps 方案对比: 现存方案 典型代表 方案特点分析 Zadig 优势 传统 Jenkins 方案 GitLab + Jenkins + 脚本化 运行效率低,管理维护成本高 方案局限性大,安全性风险高 无法支持敏捷交付模式 支持从需求到发布全流程敏捷交付。尤其面向 多服务并行部署发布,云原生构建环境和运行 环境,基础设施对接及企业级 SSO/ 权限管理 等 运维管理类平台 蓝鲸0 码力 | 52 页 | 22.95 MB | 1 年前3新一代分布式高性能图数据库的构建 - 沈游人
Technology Landscape 2020 • 图数据库 • 图数据建模 • 图计算引擎 • 图数据集成 • 可视化分析 • 知识图谱解决方案 • 图查询语言 • 欺诈检测 • 网络安全分析 • 社交网络分析 • BI 工具 • 图分析工具集 • 图咨询服务 Source : Graph Aware 图数据库发展趋势 AtlasGraph 研发背景 • 业务对大图分析的诉求(千亿点、万亿边) 网络带宽不高(千兆、万兆以太网) • 需要支持各种不同类型的图计算算法 双重执行模式 • 单机和分布式两套计算系统,在不同的使用 环境中都能达到最佳性能 针对常用算法逐个设计优化方案 • 对于常用算法,跳过固定的编程模型,分 别设计最佳的计算方案 • 例如我们自研的 node2vec 采样算法比现 有技术快了 1 个数量级 海致图计算平台特点 AtlasML 极致的性能 • Stream 进行数据流式 处理 02 03 协程和严格的内存安全性,编译 时捕获数据竞争和并发问题 异步物理算子实现,异步 IO 数 据获取 01 可静态分发的 Trait 在不带来性 能损失的同时也提高代码组织性 02 03 强大的跨平台能力,在不同架构 下可以准确的控制代码行为 编译期间对生命周期检查确保内 存安全,无 GC 和运行时损耗 01 完善的测试类型支持,包括单元0 码力 | 38 页 | 24.68 MB | 1 年前3Go读书会第二期
• Panic 不是错误处理 错误处理:保守与创新 Part8 – 编程实践:测试、调试与性能剖析 践行哲学,遵循惯例,认清本质,理解原理 • Go 测试惯例与组织形式 • 模糊测试 (fuzzing test) • 性能基准测试、度量数据与 pprof 剖析 • 调试实践 聚焦编码之外的 Go 工具链使用实践 Part9 – 标准库、反射与 cgo 践行哲学,遵循惯例,认清本质,理解原理 、 http 、 strings 、 time 、 crypto 等 ) • Reflect 反射使用三大法则 • Cgo 使用的开销 • Unsafe 包的安全使用法则 “ 自带电池”,开箱即用 Part10 – 工程实践 践行哲学,遵循惯例,认清本质,理解原理 • Go module • 自定义 go 包导入路径 • Go 命令使用(包括代码生成) • 常见的“坑” 构建、部署、代码生成、 示例代码与勘误 践行哲学,遵循惯例,认清本质,理解原理 • https://github.com/bigwhite/ GoProgrammingFromBeginnerToMaster 读书实践与体会 第三部分 Go 技术图书阅读:从外刊到内刊 Go 中文图书 Go 外文图书 读书方法 精读 • 选择高质量图书 • 脑图 + 细节摘录 + 行动清单(输出) 泛读 • 闲书0 码力 | 26 页 | 4.55 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理
并行算法实战: reduce , scan ,矩阵乘法等 10.存储大规模三维数据的关键:稀疏数据结构 11.物理仿真实战:邻居搜索表实现 pbf 流体求解 12.C++ 在 ZENO 中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 I 硬件要求: 64 位( 32 位时代过去了) 至少 2 核 4 线程(并行课…) 英伟达家显卡( GPU 专题) 软件要求: C++ 的 解构函数是显式的,离开作用域自动销毁,毫不含 糊(有好处也有坏处,对高性能计算而言利大于 弊) 如果没有解构函数,则每个带有返回的分 支都要手动释放所有之前的资源 : RAII :异常安全( exception-safe ) C++ 标准保证当异常发生时,会调用已创建对象的解构函数 。 因此 C++ 中没有(也不需要) finally 语句。 如果此处不关闭,则可等 待稍后垃圾回收时关闭。 14f) 不会出错,但是 int{3.14f} 会出错,因为 {} 是非强制转换。 2. Pig(“ 佩奇” , 3.14f) 不会出错,但是 Pig{“ 佩奇” , 3.14f} 会出错,原因同上,更安全。 3. 可读性: Pig(1, 2) 则 Pig 有可能是个函数, Pig{1, 2} 看起来更明确。 • 其实谷歌在其 Code Style 中也明确提出别再通过 () 调用构造函数,需要类型转换时应该0 码力 | 96 页 | 16.28 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅
并行算法实战: reduce , scan ,矩阵乘法等 10.存储大规模三维数据的关键:稀疏数据结构 11.物理仿真实战:邻居搜索表实现 pbf 流体求解 12.C++ 在 ZENO 中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 I 硬件要求: 64 位( 32 位时代过去了) 至少 2 核 4 线程(并行课…) 英伟达家显卡( GPU 专题) 软件要求: 完毕后才去认领下一个任务,从而即使每个任务 工作量不一也能自动适应。 • 这种技术又称为线程池( thread pool ),避免了 线程需要保存上下文的开销。但是需要我们管理 一个任务队列,而且要是线程安全的队列。 struct Task { int x0, y0; int nx, ny; }; std::queueq; 1 2 3 4 解决 3 :每个线程一个任务队 运算符访问当前指 向的元素。 可安全地被多线程并发访问 • 除了内存不连续、指针和迭代器不失效的 特点, tbb::concurrent_vector 还是一个多 线程安全的容器,能够被多个线程同时并 发地 grow_by 或 push_back 而不出错 。 • 而 std::vector 只有只读的 .size() 和 [] 运算符是安全的,且不能和写入的 push_back 0 码力 | 116 页 | 15.85 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 03 现代 C++ 进阶:模板元编程
并行算法实战: reduce , scan ,矩阵乘法等 10.存储大规模三维数据的关键:稀疏数据结构 11.物理仿真实战:邻居搜索表实现 pbf 流体求解 12.C++ 在 ZENO 中的工程实践:从 primitive 说起 13.结业典礼:总结所学知识与优秀作业点评 I 硬件要求: 64 位( 32 位时代过去了) 至少 2 核 4 线程(并行课…) 英伟达家显卡( GPU 专题) 软件要求: 如果说 int & 相当于 int * ,那么 int const & 就相当于 int const * 。 • const 修饰符的存在,使得 ref 不能被写入(赋值)。 • 这样的好处是更加安全(编译器也能够放心大胆地做自动优化): 自动类型推导:定义引用( auto & ) • 当然, auto 也可以用来定义引用,只需要改成 auto & 即可: 自动类型推导:定义常引用( auto 之外还可以用 *ret 获 取 optional 容器中的值,不过他不会 去检测是否 has_value() ,也不会抛出 异常,更加高效,但是要注意安全。 • 请确保在 has_value() 的分支内使用 *ret ,否则就是不安全的。 • 如果 optional 里的类型是结构体,则 也可以用 ret->xxx 来访问该结构体的 属性。 optional : operator0 码力 | 82 页 | 12.15 MB | 1 年前3
共 26 条
- 1
- 2
- 3