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

CANN矩阵乘法模板清单

Catlass 矩阵乘法模板清单

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

导航:新架构文档已建立 → 设计时优先阅读 architecture/02-block-layer.md(Block 组件选型)和 kernels/matmul.md(Matmul 算子完整指南)。本文档作为 catlass example 的速查索引,与架构文档互补。

模板速查表

模板名类型核心特性适用场景
00_basic_matmulCommon流水优化(Multi Buffer)通用场景,性能基线
04_padding_matmulCommonMulti Buffer + Padding(ND)Stride 非 512B 对齐
06_optimized_matmulCommonMulti Buffer + Preload + Padding(NZ) + ShuffleK + 小M指令替换泛化性强,复杂场景
09_splitk_matmulMultiCoreSplitKMulti Buffer基本任务块少、K轴大
21_basic_matmul_preload_zNCommonMulti Buffer + Preload + ShuffleKzN格式,中等复杂度
22_padding_splitk_matmulMultiCoreSplitKMulti Buffer + Padding(ND)SplitK + 非对齐Stride
25_matmul_full_loadACommonMulti Buffer + L1常驻A矩阵可全载入L1
31_small_matmulCommonMulti Buffer + Scalar消减小Shape,基本任务块≤AIC数
34_single_core_splitk_matmulSingleCoreSplitKMulti Buffer + Padding(NZ) + 写出优化单核切K场景
12_quant_matmulQuantMatmulINT8 量化矩阵乘 + PerToken 反量化W8A8 量化推理
27_matmul_geluCommon + ActivationMatmul + GELU 激活融合矩阵乘 + 激活函数
30_w8a16_matmulQuantMatmulW8A16 量化矩阵乘W8A16 量化推理

理论模板

模板分核策略特点
CommonM、N 方向分核标准分块,每个任务块搬运m₁K + Kn₁
MultiCoreSplitKM、N + K 方向分核更易负载均衡,但有 ReduceAdd 开销
SingleCoreSplitK大块 m₁n₁ + K切分减少读取,atomicAdd GM 累加
QuantMatmulM、N 方向分核 + AIC/AIV 协同AIC 做 mmad,AIV 做 dequant/epilogue;需 workspace 中间结果

工程优化手段

优化作用对应模板
Multi BufferL1/L0 多 buffer 流水并行所有模板
PreloadGM→L1 与计算重叠,减少 MTE2 空泡06, 21
Padding (ND/NZ/BlockND)解决 Stride 非对齐、ND2NZ 带宽损失04, 06, 22, 34
ShuffleKCoreIdx 偏移起始序号,避免同地址冲突06, 21
小M指令替换M<8 时逐行搬运06
L1常驻tile 块常驻 L1,减少重复读取25, 34
Scalar消减小 Shape 消减冗余标量计算31
写出优化解决 dstStride 对齐、NZ2ND 转换损失34

模板选择指南

  1. 先用 00_basic_matmul 建立性能基线,调 TileShape 后测性能
  2. 按场景选择:
    • 小 Shape(任务块 ≤ AIC 数、K 较小)→31_small_matmul
    • 任务块少且 K 大 →09_splitk_matmul22_padding_splitk_matmul
    • 泛化场景 →06_optimized_matmul21_basic_matmul_preload_zN
    • A 可 L1 常驻 →25_matmul_full_loadA
  3. Stride 非 512B 对齐时考虑 Padding 前处理,但注意 Padding 开销

DispatchPolicy 速查

DispatchPolicy对应优化
MmadAtlasA2PingpongMulti Buffer(默认)
MmadAtlasA2PreloadMulti Buffer + Preload
MmadAtlasA2Small小 Shape 优化
MmadAtlasA2SingleCoreSplitk单核切K
MmadAtlasA2FullLoadAL1 全载
MmadAtlasA2PreloadAsyncWithCallback量化场景:异步 Preload + Callback 同步 AIC/AIV

工程化模板参考

catlass/examples/advanced/basic_matmul_aclnn是算子工程结构的核心参考,包含:

文件路径用途
tiling.hadvanced/basic_matmul_aclnn/op_host/catlass_basic_matmul_tiling.hTiling 数据结构(宏定义方式)
def+infershape+tilingadvanced/basic_matmul_aclnn/op_host/catlass_basic_matmul.cppOpDef 注册、InferShape、TilingFunc 合一
op_kerneladvanced/basic_matmul_aclnn/op_kernel/catlass_basic_matmul.cppDevice 调用:CatlassBasicMatmulTemplate封装 Kernel;注意:catlass example 内的 host launch / 分支选择风格只供阅读,op_kernel 内的入口与分支机制由 工程模板决定
test_aclnnadvanced/basic_matmul_aclnn/basic_matmul_aclnn.cppaclnn 两段式调用示例

该示例展示了 00_basic_matmul 从 standalone example 到 op_host/op_kernel 分离工程的适配方式

详细参考

本文件为速查表,每个模板的详细理论模板、工程优化点、约束说明请参考 catlass 官方文档:

  • catlass/docs/2_Design/01_kernel_design/04_matmul_summary.md— 全量模板清单与详细分析(500+ 行)
  • catlass/docs/2_Design/01_kernel_design/03_dispatch_policies.md— DispatchPolicy 参数详解
  • catlass/docs/2_Design/01_kernel_design/02_swizzle.md— Swizzle 策略图解

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

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

http://www.cnnetsun.cn/news/2590660.html

相关文章:

  • Unity URP/HDRP项目里,用ShaderGraph节点快速实现5个酷炫效果(附节点图)
  • InsForge漏洞防护:如何有效防范SQL注入与XSS攻击的完整指南 [特殊字符]️
  • 三步掌握OpenSim:从生物力学新手到运动仿真专家的终极指南
  • Japanese-BGE-Reranker-V2-M3-V1安全部署与最佳实践:生产环境注意事项指南
  • 如何在Linux上无缝运行Windows软件?Bottles开源工具终极解决方案
  • 别再拍脑袋定权重了!用AHP+熵值法组合赋权,手把手教你构建靠谱的评价指标体系
  • 别再到处找破解版了!手把手教你用官方正版UltraISO 9.7.6.3829制作启动U盘
  • 魔兽争霸III终极优化指南:5个简单步骤让老游戏在Windows 11上完美重生
  • 如何使用listmonk构建高效放弃购物车邮件系统:提升电商转化率的完整指南
  • 利用依赖分析规划 ABAP 自定义代码向 SAP BTP ABAP environment 演进实战指南
  • 百度智能云AI数据服务「Ego-Centric采集解决方案」正式发布
  • 做短视频总卡在智能切片,5款工具横评实测:访谈金句提取与上下文连贯如何兼顾
  • Go语言文件上传:OSS集成
  • (论文)系统分析师系列(一)测试
  • 不踩坑!OpenClaw 2.7.5 Win11 完整部署,零基础也能 10 分钟上手
  • 柔性变形机翼关键结构的拓扑优化【附代码】
  • Air1601 LCD 显示开发全解析
  • Unity ShaderGraph实战:用Input节点5分钟搞定一个动态水面材质(附完整节点图)
  • cmux:专为 AI 编程 Agent 打造的 macOS 终端神器
  • 从开发者角度观察Taotoken平台模型更新与路由优化的及时性体验
  • 从闲鱼淘件到成功首飞:我的低成本PX4无人机DIY全记录(附电调、电池选购心得)
  • 3步掌握Steam成就管理:SteamAchievementManager导出导入实战指南
  • 保姆级教程:在CentOS 7上用源码编译安装Netdata性能监控面板(附常见启动失败排查)
  • 告别NTPD:用Chrony和GPS 1PPS信号把Linux系统时间精度拉到纳秒级
  • 让你的 Claude Code 满血复活,Anthropic 在 GitHub 上开源了个插件。
  • 从游戏开发视角理解毁伤计算:破片、冲击波与坐标变换在Unity/C++中的实现思路
  • 别再只会用主相机了!Unity Camera组件这5个隐藏功能,让你的游戏画面瞬间高级
  • 使用taotoken cli工具一键配置团队多成员的开发环境
  • 用ESP32C3和PCM5102A做个高音质蓝牙音频接收器:从硬件焊接到Arduino代码调试
  • 拆解EfficientNet的‘乐高积木’:手把手复现MBConv与SENet模块(TensorFlow 2.x版)