CANN/catlass Matmul Fixpipe Opti 样例介绍 CATLASS Matmul Fixpipe Opti 样例介绍【免费下载链接】catlass本项目是CANN的算子模板库提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass原型设计名称/Name类型/Class数据类型/Dtype维度/Dims格式/Format描述/DescriptionmatAinTensorhalf[m, k]ND左矩阵matBinTensorhalf[n, k]ND右矩阵matCoutTensorfloat[m, n]ND输出矩阵样例实现CATLASS46_ascend950_matmul_fixpipe_opti样例算子是基于CATLASS Gemm API实现的昇腾亲和Matmul算子针对Fixpipe非对齐搬出场景优化设计关键算子组件包括以下几部分:Example组装matmul_fixpipe_opti.cppKernel实现主Kernel文件matmul_mix_fixpipe_opti.hppBlock组件包含通用的mmad组件block_mmad_pingpong_tla.hpp针对Fixpipe优化的后处理组件block_epilogue_fixpipe.hppASWT分核策略BlockSchedulerAswt方案设计当前Fixpipe存在N轴非对齐写入性能不佳的问题在K值较小、MN值较大的Matmul场景中易引发Fixpipe Bound。针对上述问题Fixpipe可基于Ascend 950硬件新特性Ascend 950新增了L0C Buffer到UB的数据通路通过使能dualDstCtrl将Cube核L0C Buffer中的结果数据拆分为两路并行写入两个Vector核一个Cube核对应两个Vector核的专属UB中再使用DataCopyPad基础指令将UB中的数据搬运到Global Memory中。每个Vector核的UB支持独立开启Double Buffer以实现数据读写的流水线重叠在向Global Memory传输数据的同时持续接收来自L0C Buffer的数据有效提升数据吞吐效率。性能收益在使用相同的tileShape和scheduler策略情况下本算子(matmul_fixpipe_opti)相较于使用Fixpipe直接搬出Global Memory的传统算子方法 (matmul_fixpipe)性能对比及收益如下表。 |[M, N, K]|matmul_fixpipe|matmul_fixpipe_opti|加速比|备注| |---------|--------------|-------------------|-------|----| |[567, 488, 399]| 6.53us | 6.34us | 1.03 | MN非对齐| |[1226, 1557, 399]| 15.06us | 12.05us | 1.25 | MN非对齐 | |[2058, 2038, 256]| 20.69us | 12.64us | 1.64 | MN非对齐 | |[2048, 2048, 256]| 11.97us | 12.09us | 0.99 | MN对齐 | |[2058, 2048, 256]| 13.81us | 12.38us | 1.12 | M非对齐 | |[2048, 2038, 256]| 19.09us | 12.35us | 1.55 | N非对齐 |由表格结果可知在M、N非对齐场景特别是在N轴非对齐的情况下matmul_fixpipe_opti的性能相较于基础版本的matmul_fixpipe实现了正向提升且M、N值越大K值越小性能提升越显著。说明L1TileShape: [256, 256, 128]L0TileShape: [256, 256, 64]scheduler策略ASWT测试环境说明NPU型号为Ascend 950CANN包版本为9.0.0。【免费下载链接】catlass本项目是CANN的算子模板库提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考