CubeResGroupHandle构造函数

功能说明

根据CubeResGroupHandle构造函数中的参数设置,对组内的AIC和消息队列进行分配。创建CubeResGroupHandle对象时需要传入模板参数CubeMsgType,CubeMsgType是由用户定义的消息结构体,请参考表1

函数原型

1
2
3
4
template <typename CubeMsgType>
class CubeResGroupHandle;
__aicore__ inline CubeResGroupHandle() = default;
__aicore__ inline CubeResGroupHandle(GM_ADDR workspace, uint8_t blockStart, uint8_t blockSize, uint8_t msgQueueSize, uint8_t evtIDIn);

参数说明

表1 CubeResGroupHandle参数说明

参数

输入/输出

说明

workspace

输入

该CubeResGroupHandle存储在GM上的起始地址,作为消息通讯的地址空间。

blockStart

输入

该CubeResGroupHandle的起始AIC对应的AIV序号,必须是偶数。

blockSize

输入

该CubeResGroupHandle在AIV视角下分配的Block个数,即实际的AIC个数*2。

msgQueueSize

输入

该CubeResGroupHandle分配的消息队列总数。

evtIDIn

输入

通信框架内用于AIV侧消息的同步事件。

如下图所示,在分离架构下,第一个CubeResGroupHandle的blockStart为4,blockSize为4,在AIC视角下将映射到Block 2,即blockStart / 2;blockSize将映射到AIC视角下的两个Block,即blockSize / 2。第二个CubeResGroupHandle中,每个Block分配的消息队列msgQueue的个数应为Ceil(msgQueueSize,blockSize/2),假设msgQueueSize数量为11,则当前CubeResGroupHandle最后一个Block不足6个msgQueue,故只分配5个。

图1 Block和消息队列映射示意图

支持的型号

Atlas A2训练系列产品/Atlas 800I A2推理产品

约束说明

调用示例

1
2
3
4
5
6
uint8_t blockStartIn = 4;
uint8_t blockSizeIn = 4;
uint8_t msgQueueSizeIn = 10;
AscendC::KfcWorkspace commMem(workspace); // 用户自行管理的workspace指针。
AscendC::CubeResGroupHandle<CubeMsgBody> a;
a = AscendC::CreateCubeResGroup<1, qkType, MyCallbackFunc, CubeMsgBody>(commMem, blockStartIn, blockSizeIn, msgQueueSizeIn, tilingGM); // tilingGm是用户自定义tiling指针,用户需要通过CreateCubeResGroup接口来创建CubeResGroupHandle。