根据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); |
参数 |
输入/输出 |
说明 |
---|---|---|
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个。
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。 |