TIK常见编译错误

错误信息

当发生TIK编译错误时,在界面上显示错误信息、发生错误时算子的代码行、算子源代码的上下文和算子调用堆栈,下面是部分英文错误信息,中文含义, 处理方式:

表1 TIK编译错误信息

错误信息

中文含义

处理方式

Compile Error: The parameter type may be wrong, please check the api document

编译错误:参数类型不正确,请查阅api文档。

TIK API 参数类型不正确,请仔细核对TIK API 文档参数说明章节及注意事项

Compile Error: Scalar operation may be wrong

编译错误:标量操作错误。

标量操作不支持对应的操作数的类型,例如标量加操作不支持float类型。

Compile Error: The compile command may be wrong

编译错误:编译命令错误。

编译命令有误,可能是编译器版本不对,可能是编译参数不支持,请核对编译器版本是否准确。

Compile Error: Instruction selection may be wrong

编译错误:内部指令映射错误。

内部指令映射错误,可能是编译器版本不对,请核对编译器版本是否准确

Compile Error: Unknown errors

编译错误:未知错误。

未知类型错误,可能是编译器版本不对,请核对编译器版本是否准确。

Error: Check failed: !invalid_vars.count(op): j is used out of scope

编译错误:变量超出了其定义的作用域。

根据对应的报错语句查看哪个变量超出了其定义的作用域。

报错信息中,"j"为定义的变量名称。如果算子实现中没有定义名称为"j"的变量,则"j"可能是某个for_range()语句的索引变量。详细分析可参考示例说明2

注意事项

  1. 编译命令错误和部分未知错误不支持打印错误代码行及上下文,其余部分编译错误支持定位到具体代码行,
  2. 需要在调用BuildCCE时,配置tbe_debug_level=2。
    tik_instance.BuildCCE(..., config = {"tbe_debug_level": 2})

示例说明1

错误信息:"Scalar operation may be wrong"

示例中报错信息如下图所示:

通过第一行的报错信息,在上述表格中找到错误原因,然后根据tik算子文件中错误行的上下文上的错误代码行,可以判断出是16行标量b的赋值语句出现问题,经过查看Scalar的注意事项,并结合代码可以定位出,在设置标量值时,值是一个表达式,不支持scalar变量加float类型的数据。

示例说明2

错误信息::" xxx is used out of scope"

注意:

•样例1•样例2的报错原因都是索引变量index超出了其定义的作用域,且索引变量都是for_range语句中定义的,但两个样例的报错中,变量名称不同。在for_range()语句中,如果没有指定索引index的name,则会自动命名为“i”,“j”,“k”,......

•样例3•样例2的实现代码的区别为:样例3对for_range()语句的index变量进行了命名,其他完全一致。由•样例3的报错信息可以看出,对for_range()语句的index变量命名之后,可以快速确认是哪个变量超出了作用域。