← AMD 专题与八个进阶单元

AMD / LAB 08 OF 08

把 reduction 讲成一个可复现的系统项目

收束源码、测试、数据流和证据边界,完成英文答辩。

本单元 4 小时。本公司八个单元共 32h,三家公司共额外 96h 核心实践;这笔时间在共同路线之外,未压入厂商入门的44h。

本页是实践讲义。打开、阅读或复制命令不代表完成。新单元的 SDK、simulator 与硬件命令均未在教材建设中执行;自己的结果应按实际后端保存。

先备与马上可用的例子

先完成:amd-07 →

直接打开机制图,边看边手推

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 分钟

  1. 选择正确的主实现,保留教学 baseline 和失败修复记录。
  2. 列自己修改的函数与借鉴的公开资料;不把教材源码当作个人原创证据。

这一段的产出:贡献范围表

2. 重建复现说明 · 40 分钟

  1. README 依次写环境、编译、输入、运行、测试、计时范围、限制。
  2. 找一个新目录,从选定源码重建 CPU 分支;硬件分支仅在可用时重建。

这一段的产出:可顺序执行的 README

3. 复跑关键验收 · 90 分钟

  1. 执行空输入、尾部、固定种子、重复调用、三批缓冲用例;保留实际输出和 exit。
  2. 用只读脚本算源码摘要,将它与本次 results.csv 对应。
  3. 有真实性能数据时从原始20行重新计算统计,不手填报告里的最好数字。

这一段的产出:带来源摘要的结果包

4. 模拟面试 · 50 分钟

  1. 录一次五分钟英文说明:问题→合同→实现→测试→测量→限制。
  2. 让自己随机抽下方三题,先不看答案;把回答不足写成复习条目。
  3. 加入一个变体:N突然改为33或只来1批,指出需要变化的函数与测试。

这一段的产出:英文说明与变体分析

5. 确定下一次窄实验 · 30 分钟

  1. 只选一个后续问题,例如不同 blockSize 的数据移动/资源代价。
  2. 写明所需设备条件、预期证据和不满足条件时的 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 链接可能变化,请在自己的复现说明中保留实际版本。