TILING_KEY_IS
产 品 支 持 情 况
功 能 说 明
在 核 函 数 中 判 断 本 次 执 行 时 的tiling_key是 否 等 于host侧 运 行 时 设 置 的 某 个key,从 而 标 识tiling_key==key的 一 条kernel分 支。
函 数 原 型
Text
TILING_KEY_IS(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);
}
}