AMD矩阵核心的精确模型

Hacker News Top 论文

摘要

本文提出了针对CDNA 1/2/3架构的AMD GPU矩阵核心的精确软件模型,经硬件验证可实现位级可复现性,并展示了其在数值应用中的使用,以与NVIDIA张量核心比较精度。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/09/16 21:06

# AMD矩阵核心精确模型  
来源:https://arxiv.org/html/2609.14845  
Faizan A. Khattak,Mantas Mikaitis 邮箱:[[email protected]](mailto:[email protected])  
机构:英国利兹大学,利兹,英国  
及 Carlo J. Graziani 邮箱:[[email protected]](mailto:[email protected])  
机构:美国阿贡国家实验室,莱蒙特,伊利诺伊州,美国  

#### 摘要  
近期GPU上可用的矩阵乘法器不符合IEEE 754浮点标准。矩阵乘法器的特性在不同厂商及同一厂商的不同架构间存在差异,例如累加器宽度、舍入行为、归一化点、中间下溢和上溢逻辑、次正规数的处理以及特殊输入的处理方式。因此,小矩阵乘法器结果在不同设备间的重现性无法实现,也无法通过软件控制达成。矩阵乘法器的实现细节未被文档化,这使得解释计算结果中的差异变得困难。本文对AMD GPU三种架构(CDNA 1、CDNA 2和CDNA 3,分别对应MI100、MI210/250和MI300A/300X GPU)的矩阵乘法器数值行为进行了表征。我们设计了针对所有支持输入格式数值特性的测试向量,并提供了每个向量如何根据设备输出确定特定数值特性的推导和推理。随后为每种架构开发了基于MATLAB的矩阵乘法器软件模型,并通过包含1000万组随机输入向量的随机化测试套件验证了其与硬件的位级重现性。为此,我们应用了一种先前开发的技术,通过随机化测试和测试-细化循环迭代改进模型的精度,直至模型在每个测试用例上与硬件匹配。最后,作为利用这些模型可进行何种实验性研究的概念验证,我们在两个示范性数值应用中使用了它们,量化了AMD矩阵核心与NVIDIA张量核心在应用级精度上的差异。  

#### 关键词:矩阵核心,混合精度计算,矩阵乘法,内积,IEEE 754标准算术,OCP低精度格式  

与本文相关的软件,即MATLAB张量核心v0.6(包含所有三种CDNA架构矩阵核心模型、众多NVIDIA张量核心模型以及可用于实例化自定义矩阵乘法器变体的通用模型),可在GitHub获取:https://github.com/north-numerical-computing/MATLAB-tensor-core。  

## 1. 引言  
Hickmann和Bradford(Hickmann and Bradford, 2019)在NVIDIA V100 GPU上的早期工作展示了如何确定矩阵乘法器未文档化的若干数值特性,如舍入模式和累加器内部精度。随后,Fasi等人(2021)、Li等人(2024)和Valpey等人(2025)在V100的后续产品A100、T4、H100以及AMD GPU MI100和MI250X上进行了实验,展示了V100、A100和H100之间的差异,例如点积中累加器精度分别使用了24位、25位和26位累加。由于缺乏文档化的数值行为,现有的基于软件的矩阵乘法器模型可能无法准确表示硬件实现。在许多情况下,仿真依赖于符合IEEE标准的模型,这些模型未能真实捕获这些专用单元的行为。因此,开发精确的软件模型至关重要——不仅是为了理解硬件行为,也是为了实现可靠的科学计算并确保跨不同平台的一致性。  
在我们之前的工作(Khattak and Mikaitis, 2026)中,我们研究了NVIDIA张量核心的数值特性。通过使用针对特定浮点行为的测试向量和来自A. Khattak and Mikaitis (2025)的广义数值特性测试(GNFT)框架的组合,我们识别了广泛的数值特性。虽然大多数特性使用GNFT提取,但一些需要基于集成的随机测试,揭示了需要改进模型的新特性。这项研究涵盖了多种架构,包括Volta、Ampere、Ada Lovelace、Hopper和Blackwell。基于这些发现,我们开发了基于MATLAB的模型,这些模型实现了位级精度,并允许特定于架构和用户定义的配置。  
最近,Xie等人(2025)研究了NVIDIA和AMD GPU的数值特性。然而,他们的研究报告了各种架构的结果,但未提供特性针对性的测试向量,这使得难以独立验证报告的数值行为并评估结果的重现性。  
我们的贡献如下:  
1. (1) 我们研究了AMD GPU跨CDNA 1(MI100)、CDNA 2(MI210、MI250)和CDNA 3(MI300A、MI300X)架构的矩阵乘法器。在先前文献(Xie et al., 2025)仅指定行为的地方,我们提供了其数值特性的详细表征,以及测试向量及其有效性的解释。这使得测试方法可以扩展到未来的AMD架构。我们的研究结果还揭示了与Xie等人(2025)报告的表征的差异,我们在论文中详细讨论了这些差异。然而,Xie等人(2025)在GitHub上的配套存储库与我们的发现一致。  
2. (2) 我们为所有三种CDNA架构开发了基于MATLAB的软件模型,具有灵活性以更改各种特性用于数值实验。我们扩展了MATLAB张量核心软件(该软件先前包含超过10个NVIDIA GPU张量核心模型(Khattak and Mikaitis, 2026)),添加了CDNA矩阵核心。  
3. (3) 我们使用多字算术模拟通过低精度实现高精度GEMM(Mary and Mikaitis, 2025)和宽带信号处理算法(Redif et al., 2015)来展示了这些差异的影响,其中GEMM构成了主要的计算工作负载。  

## 2. 符号与定义  
表1显示了最新AMD架构上各种浮点格式的特性。此后,我们使用以下简写名称指代浮点格式:fp8(E4M3或E5M2)、fp16(IEEE 754的binary16)、bf16(bfloat16)、tf19(通常称为tensorfloat32)、fp32(IEEE 754的binary32)和fp64(IEEE 754的binary64)。附带说明一下,AMD文档中将E5M2和E4M3分别称为fp8和bf8。  
表1. 作为矩阵核心输入格式在基于AMD CDNA 1–4架构的GPU设备中可用的浮点格式。为了完整性包括了CDNA 4,但在撰写本文时我们无法访问该架构。  
取两个矩阵\(A \in \mathbb{R}^{m \times k}\),\(B \in \mathbb{R}^{k \times n}\)。AMD矩阵核心加速矩阵融合乘加(MFMA)操作\(D = AB + C \in \mathbb{R}^{m \times n}\)。在MFMA范围内,\(A, B\)是输入矩阵,\(C, D\)分别是累加器和输出矩阵。为简单起见,如果我们用\(d_{ij}\)表示\(D\)中第\(i\)行第\(j\)列的元素,则可以将\(d_{ij}\)表示为\(A\)的第\(i\)行与\(B\)的第\(j\)列的内积加上\(C\)中对应元素的和:  
\[ d_{ij} = \sum_{\ell=1}^{k} a_{i\ell} b_{\ell j} + c_{ij} \]  
为了关注作为底层操作的内积,而非\(D\)的特定元素,我们将省略下标:  
\[ d = \sum_{\ell=1}^{k} a_{\ell} b_{\ell} + c = \sum_{\ell=1}^{k} p_{\ell} + c \quad (1) \]  
等式(1)中的操作可以实现为顺序融合乘加(SFMA)或使用硬件支持的多项式浮点加法策略(Mikaitis, 2024; Khattak and Mikaitis, 2026; Tenca, 2009; Alexandridis and Dimitrakopoulos, 2025)。此外,存在多项式浮点加法的多种实现(Khattak and Mikaitis, 2026; Xie et al., 2025)。此类实现可能在有效数对齐期间使用额外的对齐位,我们用\(n_{\mathrm{eab}}\)表示。对于早期累加\(c\)项的架构,\(n_{\mathrm{eab}}\)直接表示额外对齐位的数量。相比之下,对于在产品累加之后累加\(c\)的架构(延迟累加),此解释不直接适用。在这种情况下,\(n_{\mathrm{eab}}\)仅指乘积项的对齐,而\(c\)与累加乘积和的对齐(无论是归一化还是非归一化)则针对每种架构进行明确描述。在整个工作中,对于任何多项式点积累加,我们将在一次多项式加法中累加的乘积项数量定义为*FMA大小*(\(N_{\mathrm{FMA}}\))(Khattak and Mikaitis, 2026)。  
在本文中,术语“小数位”仅用于表示定点表示的小数组件。  

## 3. 硬件引导的数值特性检测与模型改进  
数值特性测试(A. Khattak and Mikaitis, 2025; Li et al., 2024; Fasi et al., 2021; Hickmann and Bradford, 2019)依赖于预定义的数值特性空间,然后使用针对性的特性测试向量来确定特定矩阵或张量核心架构中是否存在特定特性。虽然特性可能自然表现出相互依赖性,但仅靠针对性特性测试不能被视为完全可靠。此外,如果硬件中存在的特性未包含在特性空间中,则无法通过限制在该空间的针对性测试来识别。为了解决这一限制,我们设计(Khattak and Mikaitis, 2026)了一种迭代模型改进策略,将数值特性测试与针对实际硬件的随机化测试相结合。该方法从当前识别的特性构建模型,并在精心选择的随机化测试向量集上比较其输出与硬件的输出。不匹配表明当前的特性空间或模型不完整,提示进一步调查并在改进过程中引入附加特性。此迭代过程持续进行,直到模型在考虑的测试向量上与硬件一致。  
对于提出的建模框架,我们通过纳入A. Khattak and Mikaitis (2025)中考虑的所有特性,以及在Khattak and Mikaitis (2026)中通过随机化测试在NVIDIA GPU张量核心架构中识别的附加特性,构建了一个初始全面的特性空间。我们还包括了Xie et al. (2025)中报告的所有AMD GPU特性。这些特性包括乘积和累加精度、舍入模式以及对齐乘积有效数时使用的对齐位数等。由于矩阵核心操作的输入空间过大而无法彻底探索,随机化测试需要一种智能采样策略来高效地识别硬件与模型之间的差异。这些差异提供了潜在缺失数值特性的证据,并指导特性空间和模型的后续改进。在第5节中,我们讨论了如何构建这样的有限测试向量集。  

## 4. 结果  
本文通过运行类似于A. Khattak and Mikaitis (2025)的数值特性检测,分析了CDNA 1、2和3架构。我们使用了MI100、MI210、MI250、MI300和MI300X AMD数据中心GPU。在所有CDNA架构中,可以通过特定的内置MFMA指令调用矩阵核心:`mfma_In_shape_Out`,其中`In`可以采用fp32、fp16和bf16输入格式,而`Out`严格为fp32,矩阵`shape`采用`m x n x k`格式,其值随输入格式而变化。  
### 4.1. CDNA 1架构  
我们分别处理每种输入格式的情况。  
#### 4.1.1. CDNA1 fp32输入  
`shape`参数支持的矩阵尺寸为`32x32x1`、`16x16x1`、`4x4x1`、`32x32x2`和`16x16x4`。我们采用了与先前工作(Fasi et al., 2021; A. Khattak and Mikaitis, 2025; Li et al., 2024)相同的数值特性确定策略,并检测到fp32输入矩阵核心是SFMA(参见第2节)。  
首先,从\(p_1\)、\(c\)和结果\(d\)确定舍入模式,如(1)所定义。对于\(p_1 = \pm 1\)且\(c = \pm \{2^{-23} + 2^{-24}, 2^{-24}\}\)(所有输入具有相同符号),\(d = \pm \{1 + 2^{-22}, 1\}\),表明采用就近舍入,偶数舍入(RNE)。  
为确定该操作是否为类SFMA,我们首先在\(p_1\)、\(p_2\)和\(c\)之间置换\(1\)、\(2^{-23}\)和\(2^{-24}\)。当\(p_2 = 2^{-23}\)时,我们得到\(d = 1 + 2^{-23}\);否则,得到\(d = \pm (1 + 2^{-22})\)。这些结果表明\(c\)和\(p_1\)先相加,其和再与\(p_2\)相加。  
然后我们在\(p_1\)、\(p_2\)和\(p_3\)之间置换\(1\)、\(2^{-23} + 2^{-24}\)和\(2^{-23} + 2^{-24}\)。除了\(p_1 = p_2 = 2^{-23} + 2^{-24}\)且\(p_3 = 1\)的情况外,对于所有排列,我们得到\(d = 1 + 2^{-21}\)。对于这个特殊情况,我们得到\(d = 1 + 2^{-22} + 2^{-23}\)。这些结果表明,fp32输入矩阵核心在所有支持的矩阵尺寸上内部实现了SFMA,即

相似文章

适用于 AMD 的 Windows CUDA

Hacker News Top

此工具提供可复现的 Windows 环境,用于在 AMD GPU 上运行针对 CUDA 的应用程序,使用 ZLUDA 和 AMD HIP/ROCm,并通过 RX 9060 XT 和 LibTorch 工作负载进行了验证。