AMD / LAB 01 OF 08
先确认机器能做什么:环境清单与求和基线
建立版本记录、支持条件和一个永远可复算的 CPU oracle。
本单元 4 小时。本公司八个单元共 32h,三家公司共额外 96h 核心实践;这笔时间在共同路线之外,未压入厂商入门的44h。
本页是实践讲义。打开、阅读或复制命令不代表完成。新单元的 SDK、simulator 与硬件命令均未在教材建设中执行;自己的结果应按实际后端保存。
先备与马上可用的例子
- 28-a · 奇数长度树形归约与扫描:先看输入和实际源码,再开始自己的修改;教学实现与自己的产出分别记录。
- 33-a · 两个存储区与回读:先看输入和实际源码,再开始自己的修改;教学实现与自己的产出分别记录。
直接打开机制图,边看边手推
- 32 · 可改条件的机制图 → Reduction、scan 与数值正确性;图解不执行厂商 SDK。
PREDICT FIRST
具体问题与独立预期
输入与约定
X=[3,-1,4,0,2];空数组;单元素 [-7]。只处理有限、范围受限的数。
先根据输入写下自己的结果与理由,再展开参考推演;随后运行或检查实现。
对照参考结果与原因
sum(X)=8;sum([])=0;sum([-7])=-7。诊断输出因机器而异,缺少 hipcc 是有效记录。
oracle 是比较其他实现的独立正确答案。本单元先锁定输入语义和证据格式,设备分支不能改变数学问题。
机制怎样连接起来
把环境拆成操作系统、GPU、内核驱动、用户态 runtime、编译器和工具六栏。找到一个 hipcc 可执行文件,只说明 PATH 能定位编译器;不能由此推出可访问 GPU。反过来,机器里有 AMD 显卡,也不意味着当前系统和驱动组合被 ROCm 支持。
默认先使用现有 Mac 完成 CPU 路径。有可用 Linux AMD 环境时,打开安装页,按具体 GPU、OS 和发行版选择同一套安装步骤;把选择结果和版本写进 env.md。管理员管理的机器直接使用其已有环境,不在学习步骤里升级驱动。latest 页面是滚动资料,不是统一版本锁文件。
四小时中环境排查最多占 75 分钟。下载权限、驱动安装或重启尚未解决时,记录缺少的前置条件并完成剩余 CPU 工作;等待安装的时间不冒充编码产出。后来补齐设备时,可以复用这里保存的测试输入。
CHOOSE ONE EXECUTION PATH
按手头环境推进
CPU 路径可以先完成。额外的 SDK 或设备验证要有自己的运行记录;本单元的四小时不同时要求完成四个分支。安装等待超过本页预算时,留下阻塞条件,继续可做的数学、代码与协议工作。
CPU · 现有机器 · 本单元尚未验收
条件:现有 macOS 或 Linux;C++20 编译器或 Python 3 标准库。无需加速卡。
本分支做什么:完成四个 CPU 测试和六栏环境清单。
保存什么证据:保存自己的源码、输入、实际 stdout/stderr 和退出码;只证明 CPU 逻辑。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
SDK · 编译与环境 · 本单元尚未验收
条件:已有兼容 ROCm/HIP 的 Linux 工具链。
本分支做什么:按官方 GPU/OS 选择器制定安装计划;已有安装只记录版本。
保存什么证据:保存实际工具版本与编译命令;仅编译成功不能记成运行通过。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
官方 simulator · 本单元尚未验收
条件:只有明确提供并且版本匹配的官方 simulator 才属于此分支。
本分支做什么:本线没有假设一个通用 HIP simulator;本单元用 CPU oracle。
保存什么证据:记录 simulator 名称、版本、输入、日志、退出状态;网页或 CPU 模型不算 simulator。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
真实设备 · 本单元尚未验收
条件:用户已有并可使用的兼容设备或实验室环境;本单元不要求购买、租用或提交集群作业。
本分支做什么:确认受支持设备可访问后才记录设备名称;此处不启动计时实验。
保存什么证据:真实设备输出、同步点、设备型号和复现日志单独保存;未执行保持未通过。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
READ → BUILD → BREAK → EXPLAIN
四小时,留下一个完整产出
可拆成多个时段。每次停下时保存代码、输入、实际结果和下一步,不用重新读整篇。没有通过当前检查时继续修正,不靠翻页推进。
1. 诊断,不猜配置 · 30 分钟
- 在自己选的练习目录运行下方只读诊断。记录 OS/架构和 hipcc 是否存在。
- 把输出中机器特有的 GPU 型号与软件版本抄入 env.md;未知就写 unknown。
这一段的产出:env.md 六栏清单
2. 选择安装路径 · 45 分钟
- 打开官方安装页,先选择 Linux/Windows 条件和实际 GPU;本路线的 HIP 实验默认兼容 Linux。
- 已有合适环境时核对版本;没有设备时写 CPU-only。若要自行安装,把选定页面的步骤另存安装计划,系统变更由自己在明确的目标机器上执行。
这一段的产出:所选官方版本链接与缺失条件
3. 写独立参考实现 · 75 分钟
- 新建 oracle.cpp,用 long long 累加本页小整数;入口明确限制单值和长度,避免有符号溢出。
- 写三个具名测试,并额外测 [5,-5,0]→0。失败返回非零,不依赖会被 NDEBUG 关闭的 assert。
- 下载 28-a 只用于对照树形过程;自己的 oracle 不调用树形函数。
这一段的产出:oracle.cpp 和四例输出
4. 让错误可见 · 60 分钟
- 故意把初始总和改成 1,确认空数组测试失败;恢复后再跑。
- 创建 results.csv,列为 case,N,expected,actual,backend,exit_code;backend 填 cpu。
- 有 HIP 环境才运行版本诊断;不把未运行的设备一栏填 0ms。
这一段的产出:一次受控失败与恢复记录
5. 口述与收尾 · 30 分钟
- 解释为何 CPU 基线足够开始下一单元,但不能通过 GPU-C。
- 提交本地 env.md、oracle.cpp、results.csv 和一个尚未解决的环境问题。
这一段的产出:基线可复现小包
EXPLICIT ENVIRONMENT / EXPLICIT STATUS
命令与可保存的起点
以下代码按各自环境使用,运行前完成对应步骤并核对版本。编译失败后停止,不运行目录中的旧二进制;每次采集日志使用新的运行目录。设备程序仅运行在你已有且可使用的环境中。
1. 只读环境诊断;可以逐行执行
环境:CPU · 现有机器 · 状态:not-executed。核对官方 API / 工具说明 ↗
uname -srm
command -v clang++
command -v hipcc
command -v hipconfig2. 仅在命令已存在的 HIP 环境
环境:SDK · 编译与环境 · 状态:not-executed。核对官方 API / 工具说明 ↗
hipcc --version
hipconfig --full3. 在自己的练习目录编译 oracle.cpp
环境:CPU · 现有机器 · 状态:not-executed。核对官方 API / 工具说明 ↗
clang++ -std=c++20 -Wall -Wextra -Wpedantic -Werror oracle.cpp -o oracle && ./oracle一个必须能解释的错误
错误情境:看到 hipcc --version 有输出就标记 GPU 已通过。
为什么会错:它没有执行 kernel,也没有验证设备内存分配或数据回读。
怎样修复:将编译器发现、编译、设备运行、性能测量分成不同记录;下一单元再建立最小运行闭环。
EVIDENCE BEFORE ADVANCING
验收与面试追问
- 四个 CPU 用例有真实输出,故意错误确实使程序非零退出。
- 安装路径明确到 OS/GPU/发行版,未将多个 latest 页面当成兼容性保证。
- env.md 能区分本机事实、计划和未知;无设备也有可交付产出。
最后留下这几项
输入和预期、自己的源码或明确标为推演的状态表、实际命令/输出/退出码、一个失败与修复、后端与版本、尚未执行的部分。运行已有教学例子与独立完成修改分别记录。
1. HIP 编译器和 GPU driver 各证明什么?
对照中文要点与英文回答
编译器把 host/device 源码变成相应产物;driver 参与设备访问、内存与提交等底层工作。单个 --version 输出只证明该程序可运行。
A compiler version proves that the compiler is present. It does not prove that a compatible device or driver can execute the program.
2. 空数组为什么先测?
对照中文要点与英文回答
它直接检验单位元和无工作分支,能发现未初始化结果,也让后续实现避免启动 0 个 block。
The empty case checks the identity value and the no-work path. I return zero without launching an empty grid.
3. 四小时内装不好环境怎么办?
对照中文要点与英文回答
记录准确阻塞条件,保留官方链接和诊断,完成 CPU 基线;下一次继续环境工作,不伪造 SDK 通过。
I keep the environment issue explicit and complete the CPU oracle. Device validation remains pending.
这些是依照本单元机制设计的追问,不是公司真题。个人验收仍依据实际代码、测试、测量与口述。
资料与版本核验
- Install AMD ROCm ↗
Select operating system, supported GPU and installation method
核验日期:2026-09-05。核验时安装页标题为 ROCm 10.0.0;实际使用前选择与机器匹配的发行版,并记录安装包版本,不与其他 latest 子项目号直接等同。
- Using HIPCC ↗
hipcc --version; hipconfig --full
核验日期:2026-09-05。HIPCC latest 文档;用 hipcc --version 记录实际编译器,用 hipconfig --full 记录实际工具链。
- HIP programming model ↗
Host programming; hierarchical thread model
核验日期:2026-09-05。核验时 HIP latest 页标题为 7.15.0;以安装工具链的版本选择器和本地头文件为准。
正文、问题和实践设计依据公开资料独立撰写。官方页面的示例输出是资料中的结果,不是本机运行证据。latest 链接可能变化,请在自己的复现说明中保留实际版本。