AMD / LAB 08 OF 08
把 reduction 讲成一个可复现的系统项目
收束源码、测试、数据流和证据边界,完成英文答辩。
本单元 4 小时。本公司八个单元共 32h,三家公司共额外 96h 核心实践;这笔时间在共同路线之外,未压入厂商入门的44h。
本页是实践讲义。打开、阅读或复制命令不代表完成。新单元的 SDK、simulator 与硬件命令均未在教材建设中执行;自己的结果应按实际后端保存。
先备与马上可用的例子
先完成:amd-07 →
- 36-a · 非整块输入的两级求和:先看输入和实际源码,再开始自己的修改;教学实现与自己的产出分别记录。
- 36-b · 只优化kernel的端到端收益:先看输入和实际源码,再开始自己的修改;教学实现与自己的产出分别记录。
直接打开机制图,边看边手推
- 38 · 可改条件的机制图 → Streams 与 events:用依赖组织异步工作;图解不执行厂商 SDK。
PREDICT FIRST
具体问题与独立预期
输入与约定
使用 amd-01..07 的固定输入、尾部用例、两缓冲三批 [8,5,10] 和20次真实样本(如有)。
先根据输入写下自己的结果与理由,再展开参考推演;随后运行或检查实现。
对照参考结果与原因
复现者能按一份 README 得到相同正确性结论;未执行后端明确列为 pending。项目不是“所有 AMD 优化已完成”。
独立产出是一个窄范围、证据完整的 reduction 实践包。公开教学起点和自己完成的代码贡献必须能分辨。
机制怎样连接起来
项目说明先讲问题和合同,再讲实现选择。用单线程→分块→输入复用→双缓冲的顺序解释每次变化解决什么,并为每个版本保存独立正确性结果;性能退步也保留。
版本清单只列影响复现的字段:源码 revision 或文件摘要、编译选项、OS、GPU/driver/runtime/compiler、输入、数据类型、测量范围。不同机器上的结果不能拼成一条速度提升曲线。
答辩要能往下追一层:何时能释放输入、为什么需要第二阶段、尾部 lane 为什么写0、哪些结果来自 CPU、哪些来自真设备。没有设备仍可以诚实说明设计和 CPU 验证,给出下一次补验证的最小命令与预期。
CHOOSE ONE EXECUTION PATH
按手头环境推进
CPU 路径可以先完成。额外的 SDK 或设备验证要有自己的运行记录;本单元的四小时不同时要求完成四个分支。安装等待超过本页预算时,留下阻塞条件,继续可做的数学、代码与协议工作。
CPU · 现有机器 · 本单元尚未验收
条件:现有 macOS 或 Linux;C++20 编译器或 Python 3 标准库。无需加速卡。
本分支做什么:独立复跑 CPU reduction 项目,交清晰范围与测试。
保存什么证据:保存自己的源码、输入、实际 stdout/stderr 和退出码;只证明 CPU 逻辑。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
SDK · 编译与环境 · 本单元尚未验收
条件:已有兼容 ROCm/HIP 的 Linux 工具链。
本分支做什么:只报告确实成功的 HIP 编译,保存版本。
保存什么证据:保存实际工具版本与编译命令;仅编译成功不能记成运行通过。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
官方 simulator · 本单元尚未验收
条件:只有明确提供并且版本匹配的官方 simulator 才属于此分支。
本分支做什么:不将 CPU 通过包装成 ROCm 仿真通过。
保存什么证据:记录 simulator 名称、版本、输入、日志、退出状态;网页或 CPU 模型不算 simulator。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
真实设备 · 本单元尚未验收
条件:用户已有并可使用的兼容设备或实验室环境;本单元不要求购买、租用或提交集群作业。
本分支做什么:真实设备工作与 CPU 证据分栏,未跑 profiling 不主张 GPU 性能。
保存什么证据:真实设备输出、同步点、设备型号和复现日志单独保存;未执行保持未通过。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
READ → BUILD → BREAK → EXPLAIN
四小时,留下一个完整产出
可拆成多个时段。每次停下时保存代码、输入、实际结果和下一步,不用重新读整篇。没有通过当前检查时继续修正,不靠翻页推进。
1. 冻结一个可讲版本 · 30 分钟
- 选择正确的主实现,保留教学 baseline 和失败修复记录。
- 列自己修改的函数与借鉴的公开资料;不把教材源码当作个人原创证据。
这一段的产出:贡献范围表
2. 重建复现说明 · 40 分钟
- README 依次写环境、编译、输入、运行、测试、计时范围、限制。
- 找一个新目录,从选定源码重建 CPU 分支;硬件分支仅在可用时重建。
这一段的产出:可顺序执行的 README
3. 复跑关键验收 · 90 分钟
- 执行空输入、尾部、固定种子、重复调用、三批缓冲用例;保留实际输出和 exit。
- 用只读脚本算源码摘要,将它与本次 results.csv 对应。
- 有真实性能数据时从原始20行重新计算统计,不手填报告里的最好数字。
这一段的产出:带来源摘要的结果包
4. 模拟面试 · 50 分钟
- 录一次五分钟英文说明:问题→合同→实现→测试→测量→限制。
- 让自己随机抽下方三题,先不看答案;把回答不足写成复习条目。
- 加入一个变体:N突然改为33或只来1批,指出需要变化的函数与测试。
这一段的产出:英文说明与变体分析
5. 确定下一次窄实验 · 30 分钟
- 只选一个后续问题,例如不同 blockSize 的数据移动/资源代价。
- 写明所需设备条件、预期证据和不满足条件时的 CPU 工作。
这一段的产出:下一步单一实验
EXPLICIT ENVIRONMENT / EXPLICIT STATUS
命令与可保存的起点
以下代码按各自环境使用,运行前完成对应步骤并核对版本。编译失败后停止,不运行目录中的旧二进制;每次采集日志使用新的运行目录。设备程序仅运行在你已有且可使用的环境中。
这个单元复用前一单元的项目文件,并按上面的具体任务修改。对应章节例子的源码、编译命令和预期输出在本页先备链接里;不要把例子自己的固定成功判定遗留到已改输入的版本中。
一个必须能解释的错误
错误情境:把不同 N、不同 GPU、不同范围的两个数字相除叫加速比。
为什么会错:分子分母没有比较同一项工作,比例不回答优化是否有效。
怎样修复:只有同输入、同机器条件、同精度/正确性合同和同计时范围的数据才能直接比较,并保留原始样本。
EVIDENCE BEFORE ADVANCING
验收与面试追问
- 新目录可以按说明复建实际完成的后端。
- 贡献、教学来源和设备证据明确。
- 能回答生命周期、尾部、两阶段、测量范围四类追问。
最后留下这几项
输入和预期、自己的源码或明确标为推演的状态表、实际命令/输出/退出码、一个失败与修复、后端与版本、尚未执行的部分。运行已有教学例子与独立完成修改分别记录。
1. 你优化了什么,证据在哪里?
对照中文要点与英文回答
先报实际后端与范围,再指向相同输入下的原始数据和正确性;无设备就只说模型与实现设计。
I state the backend and timing scope first, then show the raw measurements and correctness checks. I do not claim unmeasured GPU performance.
2. 如果加速不明显怎么办?
对照中文要点与英文回答
检查传输、启动、工作量与范围,提出有证据支持的瓶颈假设;不删去不利结果。
I examine transfers, launch overhead and workload size. A weak speedup is a result to explain, not a number to hide.
3. 项目还不能证明什么?
对照中文要点与英文回答
不能从一个 reduction 推出 driver 开发经验、所有架构精通或生产系统稳定性。
This project demonstrates a bounded reduction workflow. It does not by itself establish driver development or production reliability experience.
这些是依照本单元机制设计的追问,不是公司真题。个人验收仍依据实际代码、测试、测量与口述。
资料与版本核验
- HIP reduction tutorial ↗
Reduction stages and optimization
核验日期:2026-09-05。HIP latest / 7.15.0 页面;本讲义的短输入和算法合同独立设计,不照抄优化 kernel。
- Using rocprofv3 ↗
HIP tracing; kernel tracing; memory copy tracing; CSV output
核验日期:2026-09-05。核验时 ROCprofiler SDK 文档为 1.3.5;执行前用已安装 rocprofv3 --help 核对本版选项并记录包版本。
- Using HIPCC ↗
hipcc --version; hipconfig --full
核验日期:2026-09-05。HIPCC latest 文档;用 hipcc --version 记录实际编译器,用 hipconfig --full 记录实际工具链。
正文、问题和实践设计依据公开资料独立撰写。官方页面的示例输出是资料中的结果,不是本机运行证据。latest 链接可能变化,请在自己的复现说明中保留实际版本。