将同一个敏感矩阵乘法任务分别交给英伟达 A100、AMD MI100 和 MI250X,算出来的答案不是微小的四舍五入抖动,而是 0、255.875 和 191.875 的巨大分歧。这是 2024 年劳伦斯利弗莫尔国家实验室(LLNL)在一项实验中记录到的真实数据。很多人以为只要数据类型都叫 FP16 或 FP32,交给哪块加速卡算出来的数学结果就该一致;如果出了偏差,多半是上层框架的调度顺序或浮点结合律在作祟。但事实恰恰相反,偏差早在芯片制造完成的那一刻就被刻死在晶体管里了。

2026 年 9 月,Faizan A. Khattak、Mantas Mikaitis 与 Carlo J. Graziani 三位学者在 arXiv 上发表了论文《Accurate Models of AMD Matrix Cores》(arXiv:2609.14845)。他们通过专门设计的测试向量与 1000万组随机输入,对 AMD 三代 CDNA 架构(MI100、MI210/250、MI300A/300X)的矩阵核心(MFMA 指令单元)完成了位级精度的逆向工程建模,终于掀开了这块被 TFLOPS 跑分长期掩盖的硬件算术黑盒。

算术黑盒:脱轨的 IEEE 754

现代 GPU 上的专用矩阵乘法单元从来都不是严格遵循 IEEE 754 标准的计算器。无论是 AMD 的 Matrix Cores 还是英伟达从 V100 延续至 B200 的 Tensor Cores,硬件厂商为了榨取极致吞吐量,在内部累加器位宽、舍入行为、规约树顺序以及非正规数处理上,全都采取了未公开的硬件级妥协。存储格式兼容绝不等于运算流程合规,芯片厂商把高精度的 FP32 包装成接口给开发者,内部流水线却往往为了节省晶体管面积而暗中裁切。

研究团队用 MATLAB 搭建了一套高精度硬件仿真模型,借助闭环随机测试,一步步反推硬件流水线的真实执行逻辑。测试结果明确指向一个冷酷的现实:矩阵单元之间不仅存在厂商壁垒,就连同一厂商的不同代际芯片,其硬件运算行为也是彼此割裂的。

敏感矩阵乘法跨架构实测结果分歧(LLNL 2024) NVIDIA V100 / A100 / H100 0.000 规范化累加基线 AMD CDNA 1 (MI100) 255.875 初代 MFMA 规约树顺序差异 AMD CDNA 2 (MI250X) 191.875 输入输出强制非正规数截断 (FTZ) 来源:IEEE / LLNL 敏感矩阵乘法评测与论文实测对照

根据既往针对英伟达 Tensor Cores 的逆向研究(arXiv:2512.07004),绿厂部分中间乘积在累加前同样未经规范化。厂商们心照不宣地把这些细节藏进微架构的迷雾里,一方面是为了给后续芯片迭代保留自由度,另一方面则是认定了大多数上层应用对底层微小的精度漂移并不敏感。

同门相残:从 MI200 到 MI300 的硬件断层

最具戏剧性的发现来自于 AMD 自身的代际撕裂。逆向工程表明,CDNA 2 与 CDNA 3 在底层处理数值的方式上,走了一条完全相反的设计路线

在 CDNA 2(MI210/250)架构中,针对 FP16 和 BF16 的密集矩阵指令实施了极其激进的截断清零(Flush-to-Zero,FTZ)策略。无论是输入操作数还是最终输出,只要遇到非正规数(Subnormal numbers),硬件流水线就会不加商量地将其直接刷成零。尽管开发者在代码里写明了使用 FP32 累加,但输入阶段就已经丢失的中间有效数字,无论后续累加位宽有多大,都再也无法挽回。AMD 甚至在底层的 rocBLAS 和 MIOpen 手册中悄悄记下了这种特性。

到了 CDNA 3(MI300 系列),硬件逻辑发生了大反转。MI300 的密集 MFMA 指令不仅完整保留了输入与输出的非正规数,甚至直接选择忽略 MODE 控制寄存器,强行把舍入机制锁死为就近舍入到偶数(Round to Nearest Even,RNE)。开发者原本以为可以通过软件配置去控制芯片的数值取舍,但硬件电路直接屏蔽了软件的指令。

AMD 矩阵核心底层代际机制突变 CDNA 2 (MI200 系列) 强制非正规数清零 (FTZ) • FP16/BF16 输入输出均被截断清零 • FP32 累加阶段无法挽回精度损失 • 遵循 MODE 寄存器软件配置 代价:极端微小数值在硬件层丢失 CDNA 3 (MI300 系列) 强制锁死 RNE 舍入模式 • 完整保留输入与输出的非正规数 • 硬件直接忽略 MODE 寄存器控制 • XF32 尾数被截断舍入为 10 位 收益:数值稳定性大幅优于前代

不仅如此,在 MI300 支持的 XF32 指令中,操作数表面上是按照标准的 32 位浮点数读入,但在乘法阶段,输入的 24 位尾数硬生生被截断舍入为10位,直到累加阶段才重新切回 FP32。这与英伟达的 TF32 极为相似,但在 ROCm 公布的精度支持表里,AMD 甚至未将 TensorFloat-32 列为常规矩阵核格式向外界清晰暴露。

这种代际之间的硬分歧清楚表明,芯片每一次性能指标跃升的背后,都在硬件底层经历了一轮推倒重来的修修补补。


算力狂飙下的隐形债务

物理电路焊死的运算逻辑,任何上层编译优化都无力回天。

面对这种偏差,软件工程手段其实束手无策。翻开 rocBLAS 与 cuBLAS 的官方文档,两家给出的可复现性保证,无一例外都带着严苛的限制条件:必须是同一型号架构、相同的驱动与工具链版本、并且完全禁用原子操作。一旦脱离这个纯净的单卡环境,硬件厂商从不提供跨架构的可复现保证

  • 风险.当算法团队试图在异构集群中混合部署不同代际的 GPU 时,底层矩阵乘法的不一致性会被模型层层放大,导致梯度校验与权重对齐完全失效。

在深度学习领域,这种数值抖动通常能被随机梯度下降的容错空间吸收,工程师们只要看到模型能收敛、吞吐量足够高,往往对最底层的几位差异毫不在意。但这并不意味着债务不存在。在求解偏微分方程、天气模拟以及病态矩阵计算这类严密的科学计算场景中,微小的舍入差异与非正规数截断会像滚雪球一样引发残差发散。LLNL 实验里出现的计算分歧,就是敲给科学计算界的一记警钟。

工欲善其事,必先利其器。但在 AI 加速卡疯狂追逐参数与吞吐量的这几年里,浮点标准的严肃性早已向晶体管面积与能效比低头。当越来越多的算力基础设施开始承载不可解释的复杂算法,硬件设计者埋在底层硅片里的每一个微小妥协,终究都要由上层应用以某种隐蔽的方式偿还。