GetBlockNum
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
Ascend 950PR/Ascend 950DT | √ |
Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品 | √ |
Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品 | √ |
Atlas 200I/500 A2 推 理 产 品 | √ |
Atlas 推 理 系 列 产 品 AI Core | √ |
Atlas 推 理 系 列 产 品 Vector Core | x |
Atlas 训 练 系 列 产 品 | √ |
Kirin X90 | √ |
Kirin 9030 | √ |
功 能 说 明
头 文 件 路 径 为:"basic_api/kernel_operator_sys_var_intf.h"。
获 取 当 前 任 务 配 置 的 逻 辑AI Core的 数 量,用 于 代 码 内 部 的 多 核 逻 辑 控 制 等。
函 数 原 型
C++
__aicore__ inline int64_t GetBlockNum()
参 数 说 明
无
返 回 值 说 明
返 回 当 前 任 务 配 置 的 逻 辑AI Core的 数 量。
- 返 回 值 与<<<>>>调 用 时 配 置 的numBlocks一 致,为 参 与 计 算 的 逻 辑AI Core的 数 量。
- 当 仅 启 动Cube Core(AIC)或Vector Core(AIV)时,实 际 启 动 的AIC或AIV的 数 量 与numBlocks一 致。
- 当 同 时 启 动Cube Core(AIC)与Vector Core(AIV)时,实 际 启 动 的AIC或AIV的 数 量 可 以 通 过GetTaskRatio() * numBlocks计 算 得 到,在 当 前 支 持 的 配 置 下:
- 当AIC与AIV比 例 为1:2时,AIC启 动 的 数 量 为numBlocks,AIV启 动 的 数 量 为2 * numBlocks;
- 当AIC与AIV比 例 为1:1时,AIC启 动 的 数 量 为numBlocks,AIV启 动 的 数 量 为numBlocks。
约 束 说 明
无
调 用 示 例
C++
// srcGm、dstGm为 外 部 输 入 的gm空 间
AscendC::GlobalTensor<float> srcGlobal;
AscendC::GlobalTensor<float> dstGlobal;
int64_t blockNum = AscendC::GetBlockNum(); // 获 取 当 前 任 务 配 置 的 逻 辑AI Core的 数 量
int64_t perBlockSize = srcDataSize / blockNum; // 每 个 核 平 分 处 理 相 同 个 数
int64_t 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的 内 存 地 址