hir.matmul — 全局矩阵乘GM→GM【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills关键词matmul, Matrix Multiply, Global Memory, Descale, Swizzle, Tiling概述hir.matmul是 HIVM 方言中的全局矩阵乘操作直接从全局内存GM读取输入矩阵并执行矩阵乘法结果写回 GM。计算语义为C A * B无 bias/descale 时或C descale * (A * B bias)有 bias/descale 时。该操作涉及 MTE2GM 数据加载和 MTE3GM 数据写回两个 Pipeline由编译器自动管理 L1/L0 层次的数据搬运和同步。用户只需提供 GM 地址和 Tiling 参数无需手动管理片上存储。matmul 支持反量化descale、bias、转置、Swizzle 优化等特性适用于大矩阵乘法场景。Python API 对应Triton 的tl.dot在非 Split-K 场景下通常被映射为 matmul。IR 操作定义从 HIVMMacroOps.td 提取def MatmulOp : HIVM_GlobalMmadOpmatmul { let summary HIVM Matrix Multiply Op with inputs from global memory; let arguments (ins AnyShaped:$a, AnyShaped:$b, OptionalAnyShaped:$tilingParams, OptionalAnyShaped:$bias, OptionalAnyShaped:$descale, OptionalAttrUnitAttr:$aTranspose, OptionalAttrUnitAttr:$bTranspose, OptionalAttrHIVM_DescaleModeAttr:$descaleMode, VariadicI64:$blockSizes, VariadicI64:$processSizes, OptionalI64:$swizzleOffset, OptionalI64:$swizzleDirection, OptionalI64:$epiloguePTiles, AnyShaped:$c); }参数说明输入操作数ins参数类型必选说明$aAnyShaped是矩阵 Am x k$bAnyShaped是矩阵 Bk x n$tilingParamsAnyShaped否Tiling 参数$biasAnyShaped否Bias 向量形状为[n]$descaleAnyShaped否反量化缩放因子形状取决于 descaleMode$cAnyShaped是矩阵 C输出m x n输出操作数outs参数类型说明$resultVariadicAnyRankedTensor结果 Tensor属性属性类型必选说明$aTransposeUnitAttr否矩阵 A 转置加载$bTransposeUnitAttr否矩阵 B 转置加载$descaleModeHIVM_DescaleModeAttr否反量化模式I64 操作数参数类型必选说明$blockSizesVariadicI64否M/N/K 维度在 L1 层次处理的数据块大小$processSizesVariadicI64否M/N/K 维度在 L0 层次处理的数据块大小$swizzleOffsetI64否Swizzle 调度的连续块编号$swizzleDirectionI64否Swizzle 调度的块方向$epiloguePTilesI64否Epilogue 阶段一次处理的 P tile 数量DescaleMode 说明模式值descale 形状说明DescaleNull0无不使用反量化DescalePerChannel1[n]按 Channel 反量化形状等于 NDescalePerTensor2[1]按 Tensor 反量化形状为 1额外类方法方法返回类型说明getOpName()StringRef返回matmulgetDpsInitsMutable()MutableOperandRangeDestinationStyleOpInterface 所需IR 示例基本矩阵乘func.func test_matmul_basic(%A_gm : memref16x16xf16, #hivm.address_spacegm, %B_gm : memref16x16xf16, #hivm.address_spacegm, %res_gm : memref16x16xf16, #hivm.address_spacegm) { hivm.hir.matmul ins(%A_gm, %B_gm: memref16x16xf16, #hivm.address_spacegm, memref16x16xf16, #hivm.address_spacegm) outs(%res_gm : memref16x16xf16, #hivm.address_spacegm) descale_mode #hivm.descale_modeDescaleNull return }带 Per-Channel Descale 和 Biashivm.hir.matmul ins(%A_gm, %B_gm: memref16x16xf16, #hivm.address_spacegm, memref16x16xf16, #hivm.address_spacegm) outs(%res_gm : memref16x16xf16, #hivm.address_spacegm) bias %bias_gm : memref16xf16, #hivm.address_spacegm descale %descale_perchannel_gm : memref16xf16, #hivm.address_spacegm descale_mode #hivm.descale_modeDescalePerChannel带 Per-Tensor Descalehivm.hir.matmul ins(%A_gm, %B_gm: memref16x16xf16, #hivm.address_spacegm, memref16x16xf16, #hivm.address_spacegm) outs(%res_gm : memref16x16xf16, #hivm.address_spacegm) bias %bias_gm : memref16xf16, #hivm.address_spacegm descale %descale_pertensor_gm : memref1xf16, #hivm.address_spacegm descale_mode #hivm.descale_modeDescalePerTensorIR 层约束与验证Core Type操作在 Cube Core 上执行通过HIVMInferCoreTypeInterface推断。Pipeline涉及 MTE2 和 MTE3 两个 Pipeline。NoMaxRankTrait不限制操作数的最大 rank。Address Space输入/输出操作数通常需要#hivm.address_spacegm标记。Descale 一致性当提供 descale 操作数时descaleMode 必须与 descale 形状一致。Bias 形状bias 的形状必须为[n]与矩阵 B 的列维度匹配。blockSizes / processSizes通常为 3 个 I64 值分别对应 M、N、K 维度的块大小。常见问题Q: matmul 和 mmadL1 的主要区别A: matmul 直接从 GM 读写数据编译器自动管理 L1/L0 搬运和同步mmadL1 需要用户手动管理 L1 数据搬运。matmul 适合端到端矩阵乘法mmadL1 适合需要精细控制数据流的 Split-K 场景。Q: Swizzle 参数的作用A: Swizzle 用于优化 GM 访存的 bank conflict通过改变数据块的读取顺序来避免冲突。swizzleOffset指定起始块编号swizzleDirection指定遍历方向。Q: descale 的计算公式A:C descale * (A * B bias)其中 descale 是反量化缩放因子用于量化推理场景。相关文档源码参考HIVMMacroOps.td测试用例ops.mlirDescaleMode 枚举06-Attributes-Types/01-enumerations.md【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
全局矩阵乘(GM→GM)
发布时间:2026/7/11 13:05:26
hir.matmul — 全局矩阵乘GM→GM【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills关键词matmul, Matrix Multiply, Global Memory, Descale, Swizzle, Tiling概述hir.matmul是 HIVM 方言中的全局矩阵乘操作直接从全局内存GM读取输入矩阵并执行矩阵乘法结果写回 GM。计算语义为C A * B无 bias/descale 时或C descale * (A * B bias)有 bias/descale 时。该操作涉及 MTE2GM 数据加载和 MTE3GM 数据写回两个 Pipeline由编译器自动管理 L1/L0 层次的数据搬运和同步。用户只需提供 GM 地址和 Tiling 参数无需手动管理片上存储。matmul 支持反量化descale、bias、转置、Swizzle 优化等特性适用于大矩阵乘法场景。Python API 对应Triton 的tl.dot在非 Split-K 场景下通常被映射为 matmul。IR 操作定义从 HIVMMacroOps.td 提取def MatmulOp : HIVM_GlobalMmadOpmatmul { let summary HIVM Matrix Multiply Op with inputs from global memory; let arguments (ins AnyShaped:$a, AnyShaped:$b, OptionalAnyShaped:$tilingParams, OptionalAnyShaped:$bias, OptionalAnyShaped:$descale, OptionalAttrUnitAttr:$aTranspose, OptionalAttrUnitAttr:$bTranspose, OptionalAttrHIVM_DescaleModeAttr:$descaleMode, VariadicI64:$blockSizes, VariadicI64:$processSizes, OptionalI64:$swizzleOffset, OptionalI64:$swizzleDirection, OptionalI64:$epiloguePTiles, AnyShaped:$c); }参数说明输入操作数ins参数类型必选说明$aAnyShaped是矩阵 Am x k$bAnyShaped是矩阵 Bk x n$tilingParamsAnyShaped否Tiling 参数$biasAnyShaped否Bias 向量形状为[n]$descaleAnyShaped否反量化缩放因子形状取决于 descaleMode$cAnyShaped是矩阵 C输出m x n输出操作数outs参数类型说明$resultVariadicAnyRankedTensor结果 Tensor属性属性类型必选说明$aTransposeUnitAttr否矩阵 A 转置加载$bTransposeUnitAttr否矩阵 B 转置加载$descaleModeHIVM_DescaleModeAttr否反量化模式I64 操作数参数类型必选说明$blockSizesVariadicI64否M/N/K 维度在 L1 层次处理的数据块大小$processSizesVariadicI64否M/N/K 维度在 L0 层次处理的数据块大小$swizzleOffsetI64否Swizzle 调度的连续块编号$swizzleDirectionI64否Swizzle 调度的块方向$epiloguePTilesI64否Epilogue 阶段一次处理的 P tile 数量DescaleMode 说明模式值descale 形状说明DescaleNull0无不使用反量化DescalePerChannel1[n]按 Channel 反量化形状等于 NDescalePerTensor2[1]按 Tensor 反量化形状为 1额外类方法方法返回类型说明getOpName()StringRef返回matmulgetDpsInitsMutable()MutableOperandRangeDestinationStyleOpInterface 所需IR 示例基本矩阵乘func.func test_matmul_basic(%A_gm : memref16x16xf16, #hivm.address_spacegm, %B_gm : memref16x16xf16, #hivm.address_spacegm, %res_gm : memref16x16xf16, #hivm.address_spacegm) { hivm.hir.matmul ins(%A_gm, %B_gm: memref16x16xf16, #hivm.address_spacegm, memref16x16xf16, #hivm.address_spacegm) outs(%res_gm : memref16x16xf16, #hivm.address_spacegm) descale_mode #hivm.descale_modeDescaleNull return }带 Per-Channel Descale 和 Biashivm.hir.matmul ins(%A_gm, %B_gm: memref16x16xf16, #hivm.address_spacegm, memref16x16xf16, #hivm.address_spacegm) outs(%res_gm : memref16x16xf16, #hivm.address_spacegm) bias %bias_gm : memref16xf16, #hivm.address_spacegm descale %descale_perchannel_gm : memref16xf16, #hivm.address_spacegm descale_mode #hivm.descale_modeDescalePerChannel带 Per-Tensor Descalehivm.hir.matmul ins(%A_gm, %B_gm: memref16x16xf16, #hivm.address_spacegm, memref16x16xf16, #hivm.address_spacegm) outs(%res_gm : memref16x16xf16, #hivm.address_spacegm) bias %bias_gm : memref16xf16, #hivm.address_spacegm descale %descale_pertensor_gm : memref1xf16, #hivm.address_spacegm descale_mode #hivm.descale_modeDescalePerTensorIR 层约束与验证Core Type操作在 Cube Core 上执行通过HIVMInferCoreTypeInterface推断。Pipeline涉及 MTE2 和 MTE3 两个 Pipeline。NoMaxRankTrait不限制操作数的最大 rank。Address Space输入/输出操作数通常需要#hivm.address_spacegm标记。Descale 一致性当提供 descale 操作数时descaleMode 必须与 descale 形状一致。Bias 形状bias 的形状必须为[n]与矩阵 B 的列维度匹配。blockSizes / processSizes通常为 3 个 I64 值分别对应 M、N、K 维度的块大小。常见问题Q: matmul 和 mmadL1 的主要区别A: matmul 直接从 GM 读写数据编译器自动管理 L1/L0 搬运和同步mmadL1 需要用户手动管理 L1 数据搬运。matmul 适合端到端矩阵乘法mmadL1 适合需要精细控制数据流的 Split-K 场景。Q: Swizzle 参数的作用A: Swizzle 用于优化 GM 访存的 bank conflict通过改变数据块的读取顺序来避免冲突。swizzleOffset指定起始块编号swizzleDirection指定遍历方向。Q: descale 的计算公式A:C descale * (A * B bias)其中 descale 是反量化缩放因子用于量化推理场景。相关文档源码参考HIVMMacroOps.td测试用例ops.mlirDescaleMode 枚举06-Attributes-Types/01-enumerations.md【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考