Skip to content
版 本

GetBlockIdx

产 品 支 持 情 况

产 品是 否 支 持
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 GetBlockIdx()

参 数 说 明

返 回 值 说 明

返 回 当 前 逻 辑AI Core的 索 引。

  • 仅 启 动AIC或AIV的 场 景,索 引 的 范 围 为[0, numBlocks)。numBlocks由 用 户 使 用<<<>>>调 用 时 配 置,可 以 通 过GetBlockNum获 取。
  • 同 时 启 动AIC与AIV的 场 景,在AIC、AIV上 索 引 的 取 值 范 围 不 同,取 值 范 围 可 以 通 过GetTaskRatio() * numBlocks计 算 得 到,在 当 前 支 持 的 配 置 下:
    • 当AIC与AIV比 例 为1:2时,AIC上 取 值 范 围 为[0, numBlocks),AIV上 取 值 范 围 为[0, 2 * numBlocks);
    • 当AIC与AIV比 例 为1:1时,AIC上 取 值 范 围 为[0, numBlocks),AIV上 取 值 范 围 为[0, 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的 内 存 地 址

免 责 声 明:本 站 内 容 由 asc-devkit 仓 master 分 支 自 动 编 译 生 成,属 于 持 续 开 发 版 本,可 能 存 在 缺 陷,仅 供 预 览 与 参 考。如 需 稳 定 及 商 用 资 料,请 查 阅 官 方 昇 腾 社 区