
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_keykey的一条kernel分支。函数原型TILING_KEY_IS(key)参数说明参数输入/输出说明key输入key表示某个核函数的分支必须是非负整数。约束说明TILING_KEY_IS运用于if和else if分支不支持else分支即用TILING_KEY_IS函数来表征N个分支必须用N个TILING_KEY_IS(key)来分别表示。暂不支持Kernel直调工程。调用示例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函数示例伪代码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); } }创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考