TILING_KEY_LIST
产 品 支 持 情 况
功 能 说 明
TILING_KEY_LIST函 数 用 于 在 核 函 数 中 判 断 当 前 执 行 的TilingKey是 否 与Host侧 配 置 的 指 定TilingKey匹 配,从 而 标 识 满 足TilingKey == key1或TilingKey == key2条 件 的 分 支 逻 辑。
函 数 原 型
Text
TILING_KEY_LIST(key1,key2)
参 数 说 明
约 束 说 明
- TILING_KEY_LIST运 用 于if和else if分 支,不 支 持else分 支,即 用TILING_KEY_LIST函 数 来 表 征N个 分 支,必 须 用N个TILING_KEY_LIST(key1,key2)来 分 别 表 示。
- 支 持 传 入 两 个TilingKey,每 个TilingKey具 备 唯 一 性。
- 使 用 该 接 口 时,必 须 设 置 默 认 的Kernel类 型,也 可 以 为 某 个TilingKey单 独 配 置Kernel类 型,该 配 置 会 覆 盖 默 认Kernel类 型。Kernel类 型 仅 支 持 配 置 为KERNEL_TYPE_MIX_AIC_1_1、KERNEL_TYPE_MIX_AIC_1_2。
- 暂 不 支 持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;
KERNEL_TASK_TYPE_DEFAULT(KERNEL_TYPE_MIX_AIC_1_1);
op.Init(x, y, z, tilingData.numBlocks, tilingData.totalLength, tilingData.tileNum);
// 当TilingKey为1或2时,执 行Process1;为3或4时,执 行Process2
if (TILING_KEY_LIST(1,2)) {
op.Process1();
} else if (TILING_KEY_LIST(3,4)) {
KERNEL_TASK_TYPE(4, KERNEL_TYPE_MIX_AIC_1_2);
op.Process2();
}
// 其 他 代 码 逻 辑
...
// 此 处 示 例 当TilingKey为3或4时,会 执 行ProcessOther
if (TILING_KEY_LIST(3,4)) {
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);
} else if (some condition) {
context->SetTilingKey(4);
}
}