CreateCubeResGroup
Product Support
Product |
Supported |
|---|---|
x |
|
√ |
|
x |
|
x |
|
x |
|
x |
Function
Quickly creates a CubeResGroupHandle object to allocate message queue space and synchronization events internally. You are advised to use this API instead of the constructor of CubeResGroupHandle to create objects. Otherwise, message queue space conflicts between different objects and synchronization event errors may occur.
Prototype
1 2 | template <int groupID, class MatmulApiType, template <class, class> class CallBack, typename CubeMsgType> __aicore__ inline CubeResGroupHandle<CubeMsgType> CreateCubeResGroup(KfcWorkspace& desc, uint8_t blockStart, uint8_t blockSize, uint8_t msgQueueSize, GM_ADDR tiling) |
Parameters
Parameter |
Description |
|---|---|
groupID |
Group ID. The value is of the int32 type. |
MatmulApiType |
Defined type of the object for AIC computation. |
CallBack |
Callback function class, which needs to implement the Init and Call APIs. |
CubeMsgType |
User-defined message structure. |
Parameter |
Input/Output |
Description |
|---|---|---|
desc |
Input |
KfcWorkspace object, which is used to maintain the message queue space. |
blockStart |
Input |
Index of the AIV corresponding to the start AIC of the CubeResGroupHandle object, that is, start AIC index × 2. For example, if the start AIC index is 0, enter 0*2. If the start AIC index is 1, enter 1*2. |
blockSize |
Input |
Number of blocks allocated to CubeResGroupHandle in the AIV framework, that is, actual number of AICs × 2. |
msgQueueSize |
Input |
Total number of message queues allocated to the CubeResGroupHandle object. |
tiling |
Input |
Address of the tiling information required for AIC core computation. |
Returns
A CubeResGroupHandle object instance
Restrictions
- Assume that the number of AIV Cores of the chip is x. Then, blockStart + blockSize ≤ x – 1, and msgQueueSize ≤ x.
- Each AIC is allocated with at least one message queue (msgQueue).
- The values of blockStart and blockSize must be even numbers.
- When this API is called, 1600 bytes + sizeof(CubeMsgType) at the end of UB will be occupied.
- One AIC belongs to only one CubeGroupHandle. That is, the [blockStart/2, blockStart/2 + blockSize/2] intervals of multiple CubeGroupHandles cannot overlap.
- This API cannot be used together with REGIST_MATMUL_OBJ. The resource management API is used by users to manage the inter-core communication between the AIC and AIV. In REGIST_MATMUL_OBJ, the framework manages the inter-core communication between the AIC and AIV. If they are used at the same time, exceptions such as communication message errors may occur.
Example
1 | auto handle = AscendC::CreateCubeResGroup<GROUPID, MatmulApiType, MyCallbackFunc, CubeMsgBody> (desc, BLOCKSTART, BLOCKSIZE, MSGQUEUESIZE, tilingGM); |