CANN/asc-devkit:Matmul+Gelu融合算子中级性能优化
中级性能优化【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit本节在入门功能落地的基础上介绍Matmul融合算子的中级性能优化方法。说明入门功能落地以MatmulLeakyRelu融合算子作为讲解样例而中级和高阶极限打磨以MatmulGelu融合算子作为讲解样例。为更好展示VF融合的性能优化手段本章节以MatmulGelu融合算子作为讲解样例。GELU相比LeakyRelu计算逻辑更复杂能更充分地体现各类优化手段的效果。优化手段总览编号优化手段说明定位1L1/L0双缓冲Ping-Pong布局Cube核内MTE2搬运和MTE1/Mmad计算并行流水线骨架2大包搬运增大搬运粒度减少搬运次数流水线骨架3细粒度流水同步SetFlag/WaitFlag替代PipeBarrier实现更细粒度同步流水线骨架4LoadData3D替代LoadData2D减少MTE1指令队列占用指令队列优化5多核并行切分按M/N方向切分到多核并行计算并行策略6常量TilingTiling参数编译期确定减少运行时Scalar计算开销编译期优化7UnitFlag优化Mmad与Fixpipe细粒度流水重叠MMAD-FIXPIPE流水重叠CV融合Scenario 1 — CV融合-GM中转中级性能优化采用CV融合-GM中转方式A2/A3/Ascend 950PR均支持。AIC侧通过Fixpipe将L0C计算结果写入GMAIV侧从GM读取数据到UB后进行GELU计算再将结果写回GM。数据流路径GM ──(MTE2)── L1 ──(MTE1)── L0A/L0B ──(Cube)── L0C ──(Fixpipe)── GM ──(MTE2)── UB ──(Gelu)── UB ──(MTE3)── GMMatmul优化手段Case优化手段说明Case 1单核Tiling优化优化base块参数降低访存计算比Case 2多核切分 2x12引入多核并行计算均衡负载分配Case 3多核切分 4x6优化多核切分策略地址512B对齐Case 4多核使用MDL模板启用L1多块缓存大包搬运Gelu优化手段Case优化手段说明Case 1RegBase API VF融合寄存器级计算减少中间Load/Store利用双发特性提升IPC性能数据以Ascend 950PR芯片数据为例单独Gelu任务耗时348.868μs单独Matmul任务耗时2601.311μsScenario 1融合后总耗时2606.91μs与Matmul单独执行时间基本一致这表明采用CV融合方式编写时AIV的Vector计算时间基本被AIC的Cube计算时间完全覆盖实现了高效的流水并行。详细内容请参见MatmulGelu中级性能优化。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考