GetBlockIdx产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品 / Atlas A3 推理系列产品√Atlas A2 训练系列产品 / Atlas A2 推理系列产品√Atlas 200I/500 A2 推理产品√Atlas 推理系列产品 AI Core√Atlas 推理系列产品 Vector CorexAtlas 训练系列产品√Kirin X90√Kirin 9030√功能说明获取当前核的index用于代码内部的多核逻辑控制及多核偏移量计算等。函数原型__aicore__ inline int64_t GetBlockIdx()参数说明无返回值说明GetBlockIdx返回当前核的索引index的范围为[0, numBlocks)。numBlocks由用户使用调用时配置numBlocks数量可以通过GetBlockNum获取。同时启动AIC和AIV的场景在AIV、AIC上调用GetBlockIdx的取值范围不同当AIC和AIV比例为1:2时AIC上取值范围为[0, numBlocks)AIV上取值范围为[0, 2 * numBlocks)当AIC和AIV比例为1:1时AIC上取值范围为[0, numBlocks)AIV上取值范围为[0, numBlocks)。分离模式下可以通过GetTaskRatio获取AI Core上AIC与AIV的比例。约束说明GetBlockIdx为一个系统内置函数返回当前核的index。调用示例// srcGm、dstGm为外部输入的gm空间 AscendC::GlobalTensorfloat srcGlobal; AscendC::GlobalTensorfloat dstGlobal; blockNum AscendC::GetBlockNum(); // 获取核总数 perBlockSize srcDataSize / blockNum; // 每个核平分处理相同个数 blockIdx AscendC::GetBlockIdx(); // 获取当前工作的核ID srcGlobal.SetGlobalBuffer(reinterpret_cast__gm__ float*(srcGm blockIdx * perBlockSize * sizeof(float)), perBlockSize); // 分配每个核上的srcGlobal的内存地址 dstGlobal.SetGlobalBuffer(reinterpret_cast__gm__ float*(dstGm blockIdx * perBlockSize * sizeof(float)), perBlockSize); // 分配每个核上的dstGlobal的内存地址创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考