GetBlockIdx
Supported Products
Product |
Supported/Unsupported |
|---|---|
√ |
|
√ |
|
√ |
|
√ |
|
x |
|
√ |
Function Usage
Obtains the index of the current core, which is used for multi-core logic control and multi-core offset computation in the code.
Prototype
1 | __aicore__ inline int64_t GetBlockIdx() |
Parameters
None
Return Value Description
GetBlockIdx returns the index of the current core. The index ranges from 0 to the number of block dimensions configured by the user.
In the scenario where both AIC and AIV are started:
When the ratio of AIC to AIV is 1:2, the value range on AIC is [0, number of block dimensions configured by the user), and the value range on AIV is [0, 2 x number of block dimensions configured by the user).
When the ratio of AIC to AIV is 1:1, the value range on AIC is [0, number of block dimensions configured by the user), and the value range on AIV is [0, number of block dimensions configured by the user).
Constraints
GetBlockIdx is a built-in function of the system. It returns the index of the current core.
Examples
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include "kernel_operator.h" constexpr int32_t SINGLE_CORE_OFFSET = 256; class KernelGetBlockIdx { public: __aicore__ inline KernelGetBlockIdx () {} __aicore__ inline void Init(__gm__ uint8_t* src0Gm, __gm__ uint8_t* src1Gm, __gm__ uint8_t* dstGm) { // Offset the address of each core based on the index. src0Global.SetGlobalBuffer((__gm__ float*)src0Gm + AscendC::GetBlockIdx() * SINGLE_CORE_OFFSET); src1Global.SetGlobalBuffer((__gm__ float*)src1Gm + AscendC::GetBlockIdx() * SINGLE_CORE_OFFSET); dstGlobal.SetGlobalBuffer((__gm__ float*)dstGm + AscendC::GetBlockIdx() * SINGLE_CORE_OFFSET); pipe.InitBuffer(inQueueSrc0, 1, 256 * sizeof(float)); pipe.InitBuffer(inQueueSrc1, 1, 256 * sizeof(float)); pipe.InitBuffer(selMask, 1, 256); pipe.InitBuffer(outQueueDst, 1, 256 * sizeof(float)); } ...... }; |