使能Iterate异步接口避免AIC/AIV同步依赖
【优先级】:高
【描述】在AIC(AI Cube核)和AIV(AI Vector核)混合编程中,调用Matmul Iterate或者IterateAll时,AIV发送消息到AIC启动Matmul计算。若通过Iterate
图1 同步方式消息发送示意图
图2 异步方式消息发送示意图
【反例】
TQueBind
TQueBind
mm.SetTensorA(gmA);
mm.SetTensorB(gmB);
int16_t scalar = 2;
while(mm.template Iterate()){
auto cInUB = qVecIn.AllocTensor
mm.GetTensorC(cInUB);
qVecIn.EnQue(cInUB);
cInUB = qVecIn.Deque
auto cOutUB = qVecOut.AllocTensor
Muls(cOutUB, cInUB, scalar, baseM*baseN);
qVecIn.FreeTensor(cInUB);
...
}
【正例】
TQueBind
TQueBind
mm.SetTensorA(gmA);
mm.SetTensorB(gmB);
mm.SetWorkspace(workspace, size);//其中,workspace为临时空间的物理地址,size为singleCoreM*singleCoreN大小的矩阵C占用的内存大小:singleCoreM*singleCoreN*sizeof(float)
int16_t scalar = 2;
while(mm.template Iterate
auto cInUB = qVecIn.AllocTensor
mm.GetTensorC(cInUB);
qVecIn.EnQue(cInUB);
cInUB = qVecIn.Deque
auto cOutUB = qVecOut.AllocTensor
Muls(cOutUB, cInUB, scalar, baseM*baseN);
qVecIn.FreeTensor(cInUB);
...
}