C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化页对齐的重要性 • 为什么要 4KB ?原来现在操作系统管理内存是用分页 ( page ),程序的内存是一页一页贴在地址空间中的, 有些地方可能不可访问,或者还没有分配,则把这个页设 为不可用状态,访问他就会出错,进入内核模式。 • 因此硬件出于安全,预取不能跨越页边界,否则可能会触 发不必要的 page fault 。所以我们选用页的大小,因为本 来就不能跨页顺序预取,所以被我们切断掉也无所谓。 * 0.5 • 不妨带入 (1) 式到 (2) 式,得到: • a’’[i] = (a[i - 2] + a[i + 2]) * 0.25 + a[i] * 0.5 • 我们得到了求出两次迭代后状态的公式。这样 就可以在一个循环体内实现两次迭代的效果! 从而快了 2 倍。 动画演示 a a’ a’’ 局部数组,一步抵 16 步 • 一次性读取到局部数组 ta 里,在局部迭代 16 众所周知,内存是一维的,因此任何二维数组,都必须被扁平化,才能储存在内存中。 • 对于 float a[3][4] 编译器实际上会把他变成一维数组 float a[3*4] ,然后把 a[i][j] 翻译为 a[i * 4 + j] 。 C++ 静态数组 • arraya; 可以在栈上分配有 n 个元素的一维数组。 • 通过 a[i] 访问第 i 个元素。 • array 0 码力 | 147 页 | 18.88 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南TBB 但是找不到 Eigen3 的情况。 第 6 章:输出与变量 在运行 cmake -B build 时,打印字符串(用于调试) message(STATUS “...”) 表示信息类型是状态信息,有 -- 前缀 message(WARNING “...”) 表示是警告信息 message(AUTHOR_WARNING “...”) 表示是仅仅给项目作者看的警 告信息 AUTHOR_WARNING ${MYVAR} 这个变量。如果有这个变量则会被替换为变量的值来进行接下来的比较, 否则保持原来字符串不变。 如果我加了 ${} 会怎么样呢? if (${MYVAR} MATCHES “Hello”) 会被翻译成 if (Hello MATCHES “Hello”) 但是因为找不到名为 Hello 的变量,所以会被直接当成普通的字符串来处理。 也就是 if (“Hello” MATCHES “Hello”) 从而会执行真分支,结果正常。 万一好巧不巧,正好定义了 Hello 这个变量呢? 然而假如存在 Hello 这个变量,其值为 “ world” 。 那么 if (${MYVAR} MATCHES “Hello”) 会被翻译成 if (Hello MATCHES “Hello”) 而因为 Hello 这个变量名存在,所以会被(出于历史原因的) if 进一步求值: if (“world” MATCHES “Hello”)0 码力 | 166 页 | 6.54 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串这些整数,而 8 位整数的表示范围是 2^8 也就是 0~255 ,足以表示所有 ASCII 字符了(多余的部分实际上被用于表示 中文)。 • char 和整数无异,例如 ‘ a’ 实际上会被编译器翻译成他对应的 ASCII 码: 97 。写 ‘ a’ 和写 (char)97 是完全一样的,方便阅读的语法糖而已。 “char 即整数”思想应用举例 “char 即整数”思想应用举例 C 语言帮手函数 所以这就是为什么 GCC 标准库把成员变量 _M_p 挪到了一个 _Alloc_hider 里,而 让 _Alloc_hider 又继承 allocator 。就是为了在 allocator 为空类的时候(无状态分 配器),能让 allocator 不必占据额外的空间。 • 问题:既然 allocator 往往都是个空类( std::allocator默认就是空类,只有几个 成员函数负责调用 operator operator new 和 operator delete ),为什么还要把 allocator 对 象存到 string 对象里,最后还要搞什么空基类优化防止他浪费空间,多此一举? • 因为最近开始流行“有状态分配器”了,侯杰老师显然不知道这一点,在他的 STL 课 里,讲到这部分源码时,还吐槽“为什么多此一举”,幸好小彭老师看出了这一点。 有无空基类优化的对比 _M_dataplus._M_p _M_dataplus 0 码力 | 162 页 | 40.20 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器位于等号左侧还是右侧,分成两个独立的函数 。 • 如果等号在左侧,则被他的 ast 模块视为写入上下文( store context ),翻译成 __setitem__ 。 • 如果等号在右侧,则被他的 ast 模块视为读取上下文( load context ),翻译成 __getitem__ 。 • 也就是说 Python 的 [] 其实是调用了两个不同的运算符重载: • m[key] = val0 码力 | 90 页 | 8.76 MB | 1 年前3
Rust与算法 - 谢波个人项目实践 学习中总结探索 2015 年发布,很多人近几年才知道 Rust , Rust 中国 大会也才第三届,期待 Rust 中国大会第十届 Rust 处于起步阶段 中文圈学习资料或书籍少,有部分是翻译国外产品,能 不能中国人向国外输出作品 Rust 缺少学习资源 Rust 未来大有可为 Rust 在操作系统,数据库,各种框架和工具上应用范围 广 写作动机 当情况不明时,抱着一个纯粹的目标干事就行了,其他0 码力 | 28 页 | 3.52 MB | 1 年前3
Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇的独特优势 • Ownership 与 Lifetime • 无栈协程 Async Rust 回顾 Rust 的无栈协程抽象 — Future Async Rust 回顾 • 通过 poll 驱动的状态机 • 组合嵌套为调度单元: Task • async fn 语法糖 Async Rust 观测与调试的痛点 Async Rust 回顾 • 特性: Future 灵活的可组合性 • 任意定制 Rust 观测与调试的痛点 Async Rust 回顾 • 特性:用户态调度的无栈协程 • Pending Task 不存在栈空间 • 痛点:观测与调试工具无法还原 Pending Task 的执行状态 • 难以得知 Task 阻塞的位置和原因 • 难以调试 Async Stuck • ? 如何解决? Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 的设计原理与实现 • 追踪关键 Future 的生命周期和控制流 • Init, First Poll, Pending, Next Poll, Ready, Cancel • 实时将 Task 的执行状态维护为一棵树 • 显示目前正在阻塞 / 执行的 Await Point • 得名 Await-Tree 基本用例 Await Tree 的设计原理与实现 基本用例 Await Tree 的设计原理与实现0 码力 | 37 页 | 8.60 MB | 1 年前3
Zadig 产品使用手册环境不透明、测试效率低下、测 试有效性低、大量手工、价值难 以体现 上下游烟囱式、协作效率低、团 队花大量时间在碎片化沟通和流 程制定上、各方能力受限、无法 快速响应市场需求 层级越高、对产研状态越模糊 管理低效、延误战机 少量配置、快速拉起环境、稳定 性有保障、减少 90% 手工操作、 赋能开发、员工成就感高 碎片化:手工协作 + 复杂工具链 工程化:一个平台 一键发布 工作流、环境配置自动更新、高 测试验证 变更发布 产品规划 需求开发 更新项目管理任务状态 执行对应环境的工作流,选择对应任务 Sprint 发布 测试验证 变更发布 产品规划 需求开发 更新数据库 执行对应环境的工作流,输入 SQL 语句执行数据更新 Sprint 发布 测试验证 变更发布 产品规划 需求开发 服务的调试——查看环境和服务状态 Sprint 发布 测试验证 变更发布 产品规划0 码力 | 52 页 | 22.95 MB | 1 年前3
Zadig 面向开发者的云原生 DevOps 平台企 业 开 放 性 、 A I 能 力 增 强 产品发展历程 高频极速迭代: Zadig 开源 29 个月共迭代 21 个版本 “ ” 开发者常处于 今天发版、明早升级 嗷嗷待哺状态 Zadig 优势、使用场景、解决问题域 Zadig 解决问题域 Zadig 云原生开放性:极简、 0 负担接入 Zadig 业务架构 Zadig 系统架构 1 Zadig 行业方案 对比分析 Zadig 的主机项目和 K8s Helm Chart 项目两种场景做业务 接入,把交付端实现统一管理起来,来满足研发所有业务的日常迭代需 求。 理想使用 K8s CRD 来实现对设备状态的定义和管理,同时设备端使用 Agent 来和云端做交互,利用 Zadig 能力完成车端和云端服务的迭代更新 过程: 主机方式接入资源设备 • 支持系统主机管理的同时支持了项目级别的主机管理,项目成员可 :在 Zadig 上一键创建 dev 和 staging 环境,在不 同的集群上随时几分钟复制环境,随时满足自测需求 • 日常开发过程更便利 :直接在 Zadig 上查看服务的状态、服务日 志、登录到容器中排查诊断问题,减少多平台切换 • 高并发工作流触发 :在 Zadig 上触发多服务的构建,研发更新服务 更方便,不需要额外维护工作流的负担。 4 Zadig 企业案例0 码力 | 59 页 | 81.43 MB | 1 年前3
GPU Resource Management On JDOS系统内建支持安装 pip 依赖 – 自制存储插件支持分布式文件系统存储用户数据 – 支持官方镜像,不需要 JDOS 提前协助制作镜像 – 提供 tensorboard 作为训练监控实时查看训练状态 – 用户训练完成后释放 GPU 资源,提高 GPU 利用率 – Job 调度 (部门 quota 限制 + 优先级) • 创建训练 – 用户选择集群提供代码地址和执行命令即可 – 选择所用框架(镜像):支持官方,亦可自制 镜像填写模型名即可完成 Serving 服务创建 自有模型 • 用户只需要填写模型地址即 可 GPU 监控 • 容器监控服务,自适 应 GPU 容器,可根据 容器 IP 查询记录 , 便 于用户查看服务状态 ,亦可作为 HPA 的数 据源 • 采集项 name,index,fan.speed,te mperature.gpu,pstate,po wer.draw,power.limit,me mory0 码力 | 11 页 | 13.40 MB | 1 年前3
夏歌-使用Rust构建LLM应用PR review 机器人 设置 OpenAI 与 GitHub 基本信息 "0.1.0" 使用 Rust 构建 PR review 机器 1. 状态为 Open 的 PR 2. 状态为 Open 的 PR 有新的 commit 3. 包含了关键词为 trigger phrase 的 issue comment ,并且排除 Hello0 码力 | 36 页 | 38.31 MB | 1 年前3
共 19 条
- 1
- 2













