CANN/asc-devkit CubeResGroupHandle构造函数 📅 2026/7/15 15:03:26 CubeResGroupHandle构造函数产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品 / Atlas A3 推理系列产品xAtlas A2 训练系列产品 / Atlas A2 推理系列产品√Atlas 200I/500 A2 推理产品xAtlas 推理系列产品 AI CorexAtlas 推理系列产品 Vector CorexAtlas 训练系列产品x功能说明构造CubeResGroupHandle对象完成组内的AIC和消息队列分配。构造CubeResGroupHandle对象时需要传入模板参数CubeMsgTypeCubeMsgType是由用户定义的消息结构体请参考表1。使用此接口需要用户自主管理地址、同步事件等因此更推荐使用CreateCubeResGroup接口快速创建CubeResGroupHandle对象。函数原型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)参数说明表 1CubeResGroupHandle参数说明参数输入/输出说明workspace输入该CubeResGroupHandle的消息通讯区在GM上的起始地址。blockStart输入该CubeResGroupHandle在AIV视角下起始AIC对应的序号即AIC的起始序号*2。例如如果AIC起始序号为0则填入0*2如果为1则填入1*2。blockSize输入该CubeResGroupHandle在AIV视角下分配的Block个数即实际的AIC个数*2。msgQueueSize输入该CubeResGroupHandle分配的消息队列总数。evtIDIn输入通信框架内用于AIV侧消息的同步事件。如下图所示CubeResGroupHandle1的blockStart为4blockSize为4表示起始的AIC序号为2即blockStart / 2AIC数量为2即blockSize / 2。msgQueueSize为10表示消息队列个数为10每个Block分配的消息队列个数为Ceil(msgQueueSizeblockSize/2)Block2和Block3分配到的消息队列个数均为5。CubeResGroupHandle2的msgQueueSize数量为11最后一个Block只能分配5个消息队列。图 1Block和消息队列映射示意图约束说明假设芯片的AIV核数为x那么blockStart blockSize x - 1, msgQueueSize x。每个AIC至少被分配1个消息队列msgQueue。blockStart和blockSize必须为偶数。使用该接口UB空间末尾的1600B sizeof(CubeMsgType)将被占用。1个AIC只能属于1个CubeGroupHandle即多个CubeGroupHandle的[blockStart / 2, blockStart / 2blockSize / 2]区间不能重叠。不能和REGIST_MATMUL_OBJ接口同时使用。使用资源管理API时用户自主管理AIC和AIV的核间通信REGIST_MATMUL_OBJ内部是由框架管理AIC和AIV的核间通信同时使用可能会导致通信消息错误等异常。调用示例uint8_t blockStart 4; uint8_t blockSize 4; uint8_t msgQueueSize 10; uint8_t evtIDIn 0; //用户自行管理事件ID AscendC::KfcWorkspace desc(workspace); // 用户自行管理的workspace指针。 AscendC::CubeResGroupHandleCubeMsgBody handle; handle AscendC::CubeResGroupHandleMatmulApiType, MyCallbackFunc, CubeMsgBody(desc.GetMsgStart(), blockStart, blockSize, msgQueueSize, evtIDIn);创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考