功能介绍
Matmul的Iterate和IterateAll接口在MIX场景(包含矩阵计算和矢量计算)下提供了同步和异步两种模式,纯Cube场景(只有矩阵计算)下,只支持同步模式。
同步模式指的是程序执行时,需要等待某个操作完成后才能继续执行下一步操作。 异步模式指的是程序执行时,不需要等待某个操作完成就可以继续执行下一步操作。
- Iterate&GetTensorC的同步和异步
- IterateAll的同步和异步
- 同步:后续操作需要同步等待IterateAll执行结束。
IterateAll同步模式的关键代码示例如下:
|
mm.SetTensorA(gm_a); // 设置左矩阵A
mm.SetTensorB(gm_b); // 设置右矩阵B
mm.SetBias(gm_bias); // 设置Bias
mm.IterateAll(gm_c);
// 后续操作
...
|
- 异步:后续操作不需要同步等待IterateAll执行结束,需要IterateAll的结果时,调用WaitIterateAll等待IterateAll异步接口返回。
IterateAll异步模式的关键代码示例如下:
|
AscendC::Matmul<aType, bType, cType, biasType> mm;
mm.SetTensorA(queryGm[tensorACoreOffset]);
mm.SetTensorB(keyGm[tensorBCoreOffset + sInnerStart * singleProcessSInnerSize *
tilingData->attentionScoreOffestStrideParams.matmulHead], true);
mm.SetTail(singleProcessSOuterSize, mmNNum);
mm.template IterateAll<false>(workspaceGm[tmp_block_idx * mmResUbSize * sInnerLoopTimes],0, false,true);
// 执行其他操作
mm.WaitIterateAll(); // 等待IterateAll完成
DataCopy(dstUB, GM); // 进行GM到UB的拷贝
|
使用场景
- Iterate&GetTensorC的同步:MIX场景(包含矩阵计算和矢量计算)、纯Cube场景(只有矩阵计算)。
- Iterate&GetTensorC的异步:仅MIX场景(包含矩阵计算和矢量计算)。
- IterateAll的同步:MIX场景(包含矩阵计算和矢量计算)、纯Cube场景(只有矩阵计算)。
- IterateAll的异步:仅MIX场景(包含矩阵计算和矢量计算)。
约束说明
- Iterate&GetTensorC的异步场景:
- 传入的C矩阵地址空间大小需要保证不小于baseM * baseN。
- SetWorkspace接口需要在Iterate接口之前调用。
- 支持只输出到VECIN、只输出到Global Memory,同时输出到Global Memory和VECIN三种输出方式。
- 取出C矩阵到VECIN时,数据格式仅支持NZ;取出C矩阵到GM时,数据格式支持ND或NZ。
- IterateAll的异步场景:
- 传入的C矩阵地址空间大小需要保证不小于singleCoreM * singleCoreN。
- 仅支持连续输出至Global Memory。