GetBatchTensorC
产品支持情况
功能说明
调用一次GetBatchTensorC,会获取C矩阵片,该接口可以与IterateNBatch异步接口配合使用。用于在调用IterateNBatch迭代计算后,获取一片std::max(batchA, batchB) * singleCoreM * singleCoreN大小的矩阵分片。
函数原型
template <bool sync = true>
__aicore__ inline GlobalTensor<DstT> GetBatchTensorC(uint32_t batchA, uint32_t batchB, bool enSequentialWrite = false)
template <bool sync = true>
__aicore__ inline void GetBatchTensorC(const LocalTensor<DstT>& c, uint32_t batchA, uint32_t batchB, bool enSequentialWrite = false)
参数说明
表 1 模板参数说明
表 2 接口参数说明
返回值说明
GlobalTensor<DstT>,返回计算的矩阵分片。
约束说明
- 当使能MixDualMaster(双主模式)场景时,即模板参数enableMixDualMaster设置为true,不支持使用该接口。
- C矩阵片输出到Local Memory,且单核计算的N方向大小singleCoreN非32字节对齐的场景,C矩阵的CubeFormat仅支持ND_ALIGN格式,输出C矩阵片时,自动将singleCoreN方向上的数据补齐至32字节。
调用示例
// 计算需要多Batch计算循环次数
int for_extent = tiling.ALayoutInfoB * tiling.ALayoutInfoN * g_lay / tiling.BatchNum;
mm1.SetTensorA(gm_a[0], isTransposeAIn);
mm1.SetTensorB(gm_b[0], isTransposeBIn);
if (tiling.isBias) {
mm1.SetBias(gm_bias[0]);
}
// 多batch Matmul计算
mm1.template IterateNBatch<false>(for_extent, batchA, batchB, false);
...other compute
for (int i = 0; i < for_extent; ++i) {
mm1.template GetBatchTensorC<false>(ubCmatrix);
...other compute
}