MC2算子性能调优案例

案例介绍

MC2通算融合算子的性能收益主要来自于通信、计算的并行执行,即对Matmul计算的矩阵进行切分,通过下一块数据的Matmul计算与当前数据块的通信任务并行执行,从而达到隐藏计算/通信时间的目的。简单示意图如下,进行Matmul计算的矩阵沿M轴被切分为两块,则第二块数据的Matmul计算和第一块数据的通信可以并行执行,从而通过隐藏计算时间提高算子性能。本节的所有图示中MM代表Matmul计算,hcom代表通信任务。

以MC2通算融合算子Matmul+hcom_allReduce,算子shape为M = 4096,N = 8192,K = 4096,数据类型half为例,介绍MC2算子的主要性能优化手段。

获取性能数据

通过msProf算子调优工具获取算子性能数据:

分析主要瓶颈点

由上述图示可知MC2算子性能收益来自任务的并行执行,存在如下场景无法获得较大性能收益。

综合上述分析,在MC2算子中总的优化原则为,计算不劣化的情况下,数据切分尽量切成小块数据。

图1 优化前算子指令流水图

当前案例优化前的算子指令流水图如上图所示,Matmul执行时间888us,hcom_allReduce通信时间1025us,总时间1913us。

设计优化方案

由上述通算融合算子的特性可知,性能优化主要优化数据切分策略。

验证优化方案性能收益

上述两种数据切分方式的性能收益如下,数据切分阶段一,单算子性能收益26%,数据切分阶段二,单算子性能收益34%。

总结

MC2算子的性能优化主要关注计算性能、通信性能以及合理的切分策略。