本案例呈现了在矩阵乘算子场景中,使用Matmul高阶API进行矩阵乘法计算,使能MTE2 Preload对算子性能的提升效果。通过MatmulConfig中的doMTE2Preload参数开启矩阵M或N方向的预加载功能,预加载即在MTE2间隙提前加载A矩阵/B矩阵数据,开启预加载功能后,可以减少MTE2间隙,提升算子性能。doMTE2Preload参数的详细介绍请参考MatmulConfig。
本案例的算子规格如下:
|
输入 |
Shape |
Data type |
Format |
|---|---|---|---|
|
a |
128, 512 |
float16 |
ND |
|
b |
512, 24576 |
float16 |
ND |
当前案例使用的AI处理器共24个核,算子中使能高阶API Matmul的纯Cube模式。使用MDL模板,Tiling参数如下:
使用msProf工具获取算子仿真流水图和上板Profiling数据,重点分析Cube,Fixpipe的流水情况。
使能MTE2 Preload功能:在创建Matmul对象时,开启doMTE2Preload开关。使能MTE2 Preload的完整样例请参考M方向预加载Matmul算子样例。具体步骤如下:
1 2 |
// preloadMode = 2 static constexpr MatmulConfig MM_CFG = GetMDLConfig(false, false, preloadMode); |
1 2 3 4 |
AscendC::Matmul<AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, aType>, AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, bType>, AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, cType>, AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, biasType>, MM_CFG> matmulObj; |
当MTE2流水间隙较大,且M或N数值较大时,可以考虑使能MTE2 Preload功能,提前加载A矩阵或B矩阵数据。