Skip to content
版 本

TILING_KEY_IS

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品

Atlas 200I/500 A2 推 理 产 品

Atlas 推 理 系 列 产 品AI Core

Atlas 推 理 系 列 产 品Vector Core

Atlas 训 练 系 列 产 品

功 能 说 明

在 核 函 数 中 判 断 本 次 执 行 时 的tiling_key是 否 等 于host侧 运 行 时 设 置 的 某 个key,从 而 标 识tiling_key==key的 一 条kernel分 支。

函 数 原 型

Text
TILING_KEY_IS(key)

参 数 说 明

参 数

输 入/输 出

说 明

key

输 入

key表 示 某 个 核 函 数 的 分 支,必 须 是 非 负 整 数。

约 束 说 明

  • TILING_KEY_IS运 用 于if和else if分 支,不 支 持else分 支,即 用TILING_KEY_IS函 数 来 表 征N个 分 支,必 须 用N个TILING_KEY_IS(key)来 分 别 表 示。
  • 暂 不 支 持Kernel直 调 工 程。

调 用 示 例

Text
extern "C" __global__ __aicore__ void add_custom(__gm__ uint8_t *x, __gm__ uint8_t *y, __gm__ uint8_t *z, __gm__ uint8_t *workspace, __gm__ uint8_t *tiling)
{
    GET_TILING_DATA(tilingData, tiling);
    if (workspace == nullptr) {
        return;
    }
    KernelAdd op;
    op.Init(x, y, z, tilingData.numBlocks, tilingData.totalLength, tilingData.tileNum);
    // 当TilingKey为1时,执 行Process1;为2时,执 行Process2;为3时,执 行Process3
    if (TILING_KEY_IS(1)) {
        op.Process1();
    } else if (TILING_KEY_IS(2)) {
        op.Process2();
    } else if (TILING_KEY_IS(3)) {
        op.Process3();
    }
    // 其 他 代 码 逻 辑
    ...
    // 此 处 示 例 当TilingKey为3时,会 执 行ProcessOther
    if (TILING_KEY_IS(3)) {
        op.ProcessOther();
    }
}

配 套 的host侧tiling函 数 示 例(伪 代 码):

Text
ge::graphStatus TilingFunc(gert::TilingContext* context)
{
    // 其 他 代 码 逻 辑
    ...
    if (context->GetInputShape(0) > 10) {
        context->SetTilingKey(1);
    } else if (some condition) {
        context->SetTilingKey(2);
    } else if (some condition) {
        context->SetTilingKey(3);
    }
}

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