Triton Gluon 中的 AMD RDNA4 WMMA API:面向 gfx1200/gfx1201 的矩阵乘内建指令解析
Triton Gluon 中的 AMD RDNA4 WMMA API面向 gfx1200/gfx1201 的矩阵乘内建指令解析【免费下载链接】tritonDevelopment repository for the Triton language and compiler项目地址: https://gitcode.com/GitHub_Trending/tri/tritonGluon 是 Triton 面向高级内核的底层 GPU 编程模型将布局、共享内存、warp specialization 与目标特性直接暴露给开发者用牺牲便利换取控制力的方式支撑极致性能内核。本文以 docs/gluon/api/amd.rdna4.rst 文档页为核心深入讲解其中唯一的公开 API——triton.experimental.gluon.language.amd.rdna4.wmma它如何在 RDNA4gfx1200/gfx1201上驱动 AMD WMMA 矩阵乘指令其参数语义、底层布局约束与完整调用链是什么。读完本文你将能够在自己的 Gluon 内核中正确使用 WMMA 内建函数并理解它与其他 AMD 代际 APIRDNA3、CDNA 系列之间的关系。一、文档定位RDNA4 代际 API 参考页在 Gluon 的 AMD API 体系docs/gluon/api/amd.rst中AMD 目标相关的 Gluon API 按 GPU 代际拆分为多个独立参考页CDNA 3、CDNA 4、CDNA 5、RDNA 3、RDNA 4。其中 RDNA 4 参考页 amd.rdna4.rst 通过autosummary机制将triton.experimental.gluon.language.amd.rdna4模块中带文档字符串的公开符号自动收集并生成 API 文档该模块导出的全部符号只有一个wmma——使用 AMD WMMA 指令完成a * b acc矩阵乘的内建函数。与 CDNA 4 参考页 amd.cdna4.rst 中丰富的mfma、mfma_scaled、async_copy、buffer_atomic_*等十余个符号相比RDNA4 页面的 API 面极其精简。这不是文档遗漏而是 RDNA 架构的真实反映RDNA 代际面向图形与消费级计算矩阵乘硬件路径集中于 WMMAWave Matrix Multiply-Accumulate指令而 CDNA 代际面向数据中心 AI 计算提供 MFMA 矩阵核以及完整的缩放、异步拷贝与原子操作集合。从 rdna4/init.py 与 cdna4/init.py 两个模块的导出列表对比中可以清晰看到这一代际分工。二、wmma 内建函数签名与语义RDNA4 的wmma定义于 python/triton/experimental/gluon/language/amd/rdna4/init.pyfrom ..._core import builtin from .._ops import _wmma __all__ [wmma] builtin def wmma(a, b, acc, _semanticNone): Computes matrix multiplication a * b acc using an AMD WMMA instruction. Args: a (tensor): The operand a to be multiplied. b (tensor): The operand b to be multiplied. acc (tensor): The accumulator tensor. return _wmma(2, a, b, acc, _semantic)关键点签名wmma(a, b, acc)三个张量参数含义即文档字符串所述——计算a * b acc。_semantic为内部参数由 Gluon 前端注入普通用户无需关心。代际版本号模块把_wmma的version固定为2。对照 amd/_layouts.py 中AMDWMMALayout的版本注释版本1对应 RDNA3gfx1100、gfx1101版本2对应RDNA4gfx1200、gfx1201版本3对应 CDNA5gfx1250。因此同一份_wmma共享实现被 RDNA3 与 RDNA4 两个模块以不同版本号复用对比 rdna3/init.py 中调用_wmma(1, ...)。返回类型返回与acc相同类型ttgl.tensor(handle, acc.type)的结果张量即累加器布局同时决定结果的分布式类型。三、共享实现_wmma校验、降级与调用链wmma的实质逻辑位于 python/triton/experimental/gluon/language/amd/_ops.pydef _wmma(version, a, b, acc, semantic): Shared implementation for AMD WMMA operations for Gluon builtins _verify_wmma(version, a, b, acc) handle semantic.dot(a, b, acc, input_precisionknobs.language.fp32_default, max_num_imprecise_accNone, out_dtypeacc.dtype).handle return ttgl.tensor(handle, acc.type)调用链可以概括为wmma模块内建→_wmma共享实现→semantic.dotGluon 语义层的 dot 内建→ 后端指令选择与代码生成。_wmma不做任何数值上的自定义运算而是委托给 Gluon 的通用矩阵乘语义semantic.dot并显式传入input_precisionknobs.language.fp32_default输入精度取自 Triton 的全局 knoblanguage.fp32_default见 python/triton/knobs.py即 FP32 输入的默认计算精度策略max_num_imprecise_accNone不限制不精确累加次数out_dtypeacc.dtype输出类型跟随累加器。也就是说WMMA 的硬件指令选择是由后端根据AMDWMMALayout布局自动完成的Gluon 前端只负责把语义合法的a * b acc交给语义层这一点与 CDNA 的mfma内建直接绑定 MFMA 布局与缩放语义存在架构上的差异——RDNA4 的wmma更接近带布局约束的 dot。3.1 布局校验_verify_wmma调用semantic.dot之前_verify_wmmaamd/_ops.py会对三个操作数做严格的布局约束检查任何一条不满足都会抛出断言错误acc必填且其布局必须是AMDWMMALayout并且layout.version versionRDNA4 即版本 2a的布局必须是DotOperandLayout且其parent是与acc版本一致的AMDWMMALayoutb的布局同样必须是DotOperandLayoutparent 为匹配的AMDWMMALayout。这印证了 Gluon 的布局体系累加器持有一个父级 WMMA 布局两个乘数操作数则通过DotOperandLayout的parent字段挂靠到该父布局上从而把 M/N/K 维的线程与寄存器映射关系统一起来。若你在内核中手写wmma调用而操作数布局不满足上述关系会在编译期收到明确的断言错误。四、AMDWMMALayoutRDNA4 WMMA 的布局载体理解wmma必须理解其布局类型AMDWMMALayout定义于 python/triton/experimental/gluon/language/amd/_layouts.py。它继承自 Gluon 核心的DistributedLayoutpython/triton/experimental/gluon/language/_layouts.py核心字段如下字段类型含义默认值versionintGPU 架构代际1RDNA32RDNA43CDNA5必填transposedbool结果张量是否转置影响线程持有连续元素的排布必填warp_basesList[List[int]]CTA 布局的 warp 基向量必填reg_basesOptional[List[List[int]]]CTA 布局的重复寄存器基向量[]instr_shapeOptional[List[int]]指令形状 (M, N, K)[16, 16, 16]cga_layoutList[List[int]]CTA 平铺cluster基向量[]rankOptional[int]warp/寄存器基的秩2值得注意的实现细节amd/_layouts.pyinstr_shape缺省为[16, 16, 16]即单个 WMMA 指令的 (M, N, K) 形状RDNA 的 WMMA 指令族正是以 16×16×16 为典型基本形状。rank缺省为 2对应二维的 warp/寄存器平铺cga_layout为空时表示不做 CTA 级平铺。所有字段在__post_init__中先经_unwrap_if_constexpr解包允许 constexpr 传参再调用verify()做合法性校验。_to_ir方法把布局序列化为 IR 层的get_amd_wmma_layout调用这是 Gluon 前端与 MLIR 后端之间的桥梁。同时AMDMFMALayout同文件 L16-L106是 CDNA 系列的对应布局其verify()会检查instr_shape的前两维属于[[32,32], [16,16], [64,4], [4,64]]、element_bitwidth为 32 或 64版本区间为 1gfx908到 4gfx950——与 WMMA 布局的代际映射1gfx1100/11012gfx1200/12013gfx1250共同构成 AMD 各代 GPU 的布局版本表。从源码结构看MFMA 布局覆盖了从 CDNA1 到 CDNA4 的更长时间跨度而 WMMA 布局覆盖 RDNA3/RDNA4 与 CDNA5两条指令族在 CDNA5 上汇合AMDWMMALayout版本 3。五、在内核中使用 RDNA4 wmma结合上述签名与布局约束一个典型的用法模式是先为累加器构造AMDWMMALayout(version2, ...)再让a、b以DotOperandLayout挂靠该布局最后调用wmma(a, b, acc)。例如from triton.experimental.gluon import language as ttgl from triton.experimental.gluon.language.amd.rdna4 import wmma from triton.experimental.gluon.language.amd._layouts import AMDWMMALayout from triton.experimental.gluon.language._layouts import DotOperandLayout # RDNA4 (gfx1200/gfx1201) 上的 WMMA 累加器布局 acc_layout AMDWMMALayout( version2, # RDNA4 transposedFalse, warp_bases[[4, 1], [1, 4]], instr_shape[16, 16, 16], ) # 操作数布局DotOperandLayout 的 parent 必须指向 acc_layout a_layout DotOperandLayout(parentacc_layout, operand_index0, k_width16) b_layout DotOperandLayout(parentacc_layout, operand_index1, k_width16) # ... 构造 a、b、acc 三个分布式张量 ... c wmma(a, b, acc) # c a * b acc需要强调上述布局参数仅为示意实际内核中布局通常由后端推导例如通过ttgl.make_tensor_descriptor或自动布局推导流程获得手动构造布局属于 Gluon 提供的高级控制路径若在 RDNA3gfx1100/gfx1101上运行应改用 amd.rdna3 模块 的wmma内部版本号为 1两者 API 签名完全一致完整可运行的 Gluon 示例内核参见 python/tutorials/gluon/ 教程目录与 python/examples/gluon/ 示例目录Gluon 总览 docs/gluon/index.rst 也提供了教程与示例画廊的入口。六、与相邻代际 API 的对照为帮助你在正确的硬件上选择正确的 API下表总结了当前仓库中 AMD 各代际 Gluon 模块的实际导出情况依据各__init__.py源码代际模块路径代表性内建布局版本RDNA 3language/amd/rdna3/wmmaAMDWMMALayoutv1gfx1100/1101RDNA 4language/amd/rdna4/wmmaAMDWMMALayoutv2gfx1200/1201CDNA 3language/amd/cdna3/buffer_*、mfma等基础集AMDMFMALayoutv3gfx942CDNA 4language/amd/cdna4/mfma_scaled、scaled_upcast/downcast、load_shared_fp4_repacked、async_copy、buffer_atomic_*AMDMFMALayoutv4gfx950CDNA 5language/amd/cdna5/扩展集含AMDWMMALayoutv3MFMA WMMA 并存从实现上看cdna4/init.pyCDNA4 模块会通过from ..cdna3 import *继承 CDNA3 的全部符号再叠加 MX 格式Microscaling相关的缩放矩阵乘能力而 RDNA4 模块仅导出wmma一个符号专注于 WMMA 路径。选择哪个模块取决于目标硬件属于 RDNA 消费级架构还是 CDNA 数据中心架构。七、结语docs/gluon/api/amd.rdna4.rst虽然只有寥寥数行的autosummary指令但它指向的rdna4.wmma内建函数承载了完整的代际语义版本号2精确映射 gfx1200/gfx1201共享实现_wmma通过_verify_wmma强制AMDWMMALayoutDotOperandLayout的父子布局结构并委托semantic.dot完成最终指令生成。对 Gluon 开发者而言掌握这一条调用链与布局约束就等于掌握了 RDNA4 上布局即性能的编程范式核心。参考资源仓库内API 参考页docs/gluon/api/amd.rdna4.rst、docs/gluon/api/amd.rst、docs/gluon/api/amd.rdna3.rst、docs/gluon/api/amd.cdna4.rst内建实现rdna4/init.py、rdna3/init.py、amd/_ops.py布局定义amd/_layouts.pyGluon 总览docs/gluon/index.rst教程与示例python/tutorials/gluon/、python/examples/gluon/【免费下载链接】tritonDevelopment repository for the Triton language and compiler项目地址: https://gitcode.com/GitHub_Trending/tri/triton创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →