当前位置: 首页 > news >正文

CANN混合矩阵乘优化

hir.mix_matmul — 混合 Cube+Vector 矩阵乘

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

关键词:mix_matmul, Mix Matrix Multiply, Post-Vector Function, Workspace, Communication

概述

hir.mix_matmul是 HIVM 方言中的混合矩阵乘操作,在 Cube Core 执行矩阵乘法后,支持在 Vector Core 上执行后处理函数(post-vector function)。这种 Cube+Vector 的混合模式允许在 tile 级别融合后处理操作(如激活函数、类型转换等),避免额外的 GM 读写开销。

计算语义与 matmul 相同:C = descale * (A * B + bias),但额外支持:

  • post_vector_func_ins:Vector 后处理函数的输入参数
  • workspace_ins:工作空间缓冲区
  • comm_params:通信参数(用于融合通信操作,如 AllReduce)

Python API 对应:Triton 的tl.dot+ 后续 elementwise 操作在编译时可能被融合为 mix_matmul。

IR 操作定义

从 HIVMMacroOps.td 提取:

def MixMatmulOp : HIVM_GlobalMmadOp<"mix_matmul"> { let summary = "HIVM (Mix) Matrix Multiply Op with inputs from global memory"; let arguments = (ins AnyShaped:$a, AnyShaped:$b, Variadic<AnyShaped>:$postVecFuncIns, Variadic<AnyShaped>:$workspaceIns, Optional<AnyShaped>:$tilingParams, Optional<AnyShaped>:$commParams, Optional<AnyShaped>:$bias, Optional<AnyShaped>:$descale, OptionalAttr<UnitAttr>:$aTranspose, OptionalAttr<UnitAttr>:$bTranspose, OptionalAttr<HIVM_DescaleModeAttr>:$descaleMode, Variadic<I64>:$blockSizes, Variadic<I64>:$processSizes, Optional<I64>:$swizzleOffset, Optional<I64>:$swizzleDirection, Optional<I64>:$epiloguePTiles, AnyShaped:$c); }

参数说明

输入操作数(ins)

参数类型必选说明
$aAnyShaped矩阵 A,m x k
$bAnyShaped矩阵 B,k x n
$postVecFuncInsVariadic<AnyShaped>Vector 后处理函数的输入参数
$workspaceInsVariadic<AnyShaped>工作空间缓冲区输入
$tilingParamsAnyShapedTiling 参数
$commParamsAnyShaped通信相关参数(拓扑、通信器、group 等)
$biasAnyShapedBias 向量
$descaleAnyShaped反量化缩放因子
$cAnyShaped矩阵 C(输出)

输出操作数(outs)

参数类型说明
$resultVariadic<AnyRankedTensor>结果 Tensor

属性

属性类型必选说明
$aTransposeUnitAttr矩阵 A 转置加载
$bTransposeUnitAttr矩阵 B 转置加载
$descaleModeHIVM_DescaleModeAttr反量化模式
post_vector_funcStrAttrVector 后处理函数名称(通过属性指定)

I64 操作数

参数类型必选说明
$blockSizesVariadic<I64>L1 层次 M/N/K 块大小
$processSizesVariadic<I64>L0 层次 M/N/K 块大小
$swizzleOffsetI64Swizzle 起始块编号
$swizzleDirectionI64Swizzle 方向
$epiloguePTilesI64Epilogue P tile 数量

与 matmul 的差异

特性matmulmix_matmul
后处理融合不支持支持post_vector_func_ins
工作空间不支持支持workspace_ins
通信参数不支持支持comm_params
OpName"matmul""mix_matmul"

IR 示例

基本用法

hivm.hir.mix_matmul ins(%A_gm, %B_gm: memref<16x16xf16, #hivm.address_space<gm>>, memref<16x16xf16, #hivm.address_space<gm>>) outs(%res_gm : memref<16x16xf16, #hivm.address_space<gm>>) tiling_params = %tiling_params_gm : memref<16xf16, #hivm.address_space<gm>> comm_params = %comm_params_gm : memref<16xi64, #hivm.address_space<gm>>

带 Post-Vector Function 和 Workspace

hivm.hir.set_ffts_base_addr %arg0 hivm.hir.mix_matmul {post_vector_func = "bishengir_gen_vector_epilogue_func"} ins(%arg1, %arg2 : memref<1024x1024xf16, #hivm.address_space<gm>>, memref<1024x1024xf16, #hivm.address_space<gm>>) post_vector_func_ins(%arg3 : memref<1024x1024xf16, #hivm.address_space<gm>>) workspace_ins(%arg4 : memref<1024x1024xf16, #hivm.address_space<gm>>) outs(%arg5 : memref<1024x1024xf16, #hivm.address_space<gm>>) block_sizes(%c128_i64, %c256_i64, %c256_i64 : i64, i64, i64) process_sizes(%c128_i64, %c256_i64, %c64_i64 : i64, i64, i64) swizzle_offset = %c1_i64 : i64 swizzle_direction = %c0_i64 : i64 epilogue_p_tiles = %c4_i64 : i64

IR 层约束与验证

  1. Core Type:通过HIVMInferCoreTypeInterface推断,通常为 Cube Core 执行矩阵乘法部分。
  2. Pipeline:涉及 MTE2 和 MTE3 两个 Pipeline。
  3. Post-Vector Functionpost_vector_func属性指定 Vector 后处理函数名称,postVecFuncIns提供其输入参数。
  4. WorkspaceworkspaceIns提供工作空间缓冲区,用于中间计算结果存储。
  5. CommunicationcommParams用于融合通信操作(如 AllReduce),包含拓扑、通信器等信息。
  6. MIX Kernel:使用 mix_matmul 的函数通常标记为hivm.func_core_type = #hivm.func_core_type<AIV>MIX

常见问题

Q: mix_matmul 的 post_vector_func 是什么?A: 它是 Vector Core 上执行的后处理函数,可以对矩阵乘结果进行激活函数、类型转换等操作。函数名通过post_vector_func属性指定,输入通过postVecFuncIns传入。

Q: workspace_ins 的用途?A: 工作空间缓冲区用于存储中间计算结果,例如在融合 AllReduce 时需要临时存储部分和。

Q: 什么时候应该用 mix_matmul 而不是 matmul?A: 当需要在矩阵乘后立即执行 Vector 后处理(如激活、量化)或需要融合通信操作时,使用 mix_matmul 可以避免额外的 GM 读写。

相关文档

  • 源码参考:HIVMMacroOps.td
  • 测试用例:ops.mlir
  • matmul 详解:03-matmul.md

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1168561/

相关文章:

  • 2026河源黄金奢侈品回收避坑指南:全城免费上门,这4家正规实体店实测推荐(主推源奢汇) - 生活测评小能手
  • PUBG罗技鼠标宏:从弹道控制到竞技进阶的全方位指南
  • 2026年7月最新北京真力时官方售后客服中心地址电话及服务网点分布 - 亨得利官方服务中心
  • MCP3551 22位Δ-Σ ADC与PIC18微控制器的精密测量应用
  • 2026阜阳装修市场深度测评:十大靠谱家装品牌甄选及装修消费指南 - 装修新知
  • MiniMax-M2.7-MXFP4模型优化指南:从配置文件到推理引擎的全方位调优
  • SolarWinds NTA 12.0 企业网络异常检测:基于NetFlow的3类威胁识别实战
  • 2026 年 7 月卡地亚维保选店攻略:无锡门店维修好不好?师傅技术与设备专业度深度测评 - 卡地亚中国售后中心
  • RAG检索增强生成技术:从原理到生产级实现
  • palera1n终极指南:基于checkm8漏洞的iOS越狱技术深度解析
  • 2026珠三角东莞网站建设外贸独立站开发服务商实力测评报告
  • 2026广东随身wifi行业评测报告:选购指南与关键指标权重分析 - GrowUME
  • 熊猫烧香病毒 3 大自启动机制剖析:注册表、文件隐藏与进程守护
  • Nemotron-Labs-Audex-2B音频编码器原理:从NV-Whisper到特征投影全解析
  • 如何将QRCode集成到你的iOS项目:Carthage、Cocoapods和手动安装指南
  • MySQL安装教程:图文教程从零开始,手把手教你搭建稳定高效的数据库环境
  • 【武汉学费便宜的民办高中推荐】2026级武汉思久高级中学招生简章|录取分数线|班型|收费标准 - 湖北升学规划
  • 一个坏毛病——粗枝大叶!
  • MA12070音频放大器与STM32F302VC的集成设计解析
  • 2026 年现阶段,雨湖值得关注的瓷板画激光雕刻机制造商哪家可靠,别再用传统方式!这台设备如何颠覆你的瓷板设计? - 行业鉴选官
  • vLLM推理引擎配置指南:在ROCm 7.1.1上部署MiniMax-M3-MXFP4-AttnFP8
  • AI大厂面试200问-第六章
  • Nutstore Sync 和 Remotely Save + WebDAV 有什么区别?Obsidian 坚果云同步新旧方案对比
  • 暴力美学:Ornith-1.0 是如何让 HouseLLM BenchMaxx “下课”的?
  • Qwen3-30B-A3B-Thinking-2507-FP8模型安全部署指南:权限控制与访问管理
  • 终极指南:如何免费将3D VR视频转换为2D格式,无需昂贵头显
  • ADS7828与PIC18F2682构建高精度数据采集系统
  • 融资融券的“信用密码”:解码担保品的杠杆魔法与生存法则
  • 从配置到推理:AMD GLM-5-MXFP4模型的完整使用手册(附常见问题解决)
  • LLM推理部署优化:从算法到系统的全栈加速方案