---
title: TIK常见编译错误
description: "当发生TIK编译错误时，在界面上显示错误信息、发生错误时算子的代码行、算子源代码的上下文和算子调用堆栈，下面是部分英文错误信息，中文含义， 处理方式："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/tbeaicpudevg/atlasopdev_10_0066.html
sourcePath: /source/zh/canncommercial/900/others/tbeaicpudevg/atlasopdev_10_0066.html
indexId: ba7adc5fecb798e6e3d043ac3cbf8a3e05335646d5bce096a73887782476349e73
---
# 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
  示例代码如下所示：

```
from tbe import tik
tik_instance = tik.Tik()
b = tik_instance.Scalar(dtype="int32", init_value=2, name="b")
dup_value = tik_instance.Scalar(dtype="int32", init_value=3, name="dup_value")
a_ub = tik_instance.Tensor(shape=(192,), name="a_ub", scope=tik.scope_ubuf, dtype="int32")
with tik_instance.for_range(0, 2) as index:
dup_value.set_as(b * dup_value)
tik_instance.vec_dup(64, a_ub[index*64:], dup_value, 1, 8)
tik_instance.vec_dup(64, a_ub[index*64:], dup_value, 1, 8)  # index超作用域
tik_instance.BuildCCE("test_for_range", inputs=[], outputs=[])
```


  编译时，报错信息如下图所示：

- 样例2
  示例代码如下所示：

```
from tbe import tik
tik_instance = tik.Tik()
b = tik_instance.Scalar(dtype="int32", init_value=2, name="b")
dup_value = tik_instance.Scalar(dtype="int32", init_value=3, name="dup_value")
a_ub = tik_instance.Tensor(shape=(192,), name="a_ub", scope=tik.scope_ubuf, dtype="int32")
with tik_instance.for_range(0, 2) as index:
dup_value.set_as(b * dup_value)
tik_instance.vec_dup(64, a_ub[index*64:], dup_value, 1, 8)
with tik_instance.for_range(0, 2) as index:
dup_value.set_as(b * dup_value)
tik_instance.vec_dup(64, a_ub[index*64:], dup_value, 1, 8)
tik_instance.vec_dup(64, a_ub[index*64:], dup_value, 1, 8)  # index超作用域
tik_instance.BuildCCE("test_for_range", inputs=[], outputs=[])
```


  编译时，报错信息如下图所示：

- 样例3
  示例代码如下所示：

```
from tbe import tik
tik_instance = tik.Tik()
b = tik_instance.Scalar(dtype="int32", init_value=2, name="b")
dup_value = tik_instance.Scalar(dtype="int32", init_value=3, name="dup_value")
a_ub = tik_instance.Tensor(shape=(192,), name="a_ub", scope=tik.scope_ubuf, dtype="int32")
with tik_instance.for_range(0, 2, name="index1") as index:  # 指定index的变量名
dup_value.set_as(b * dup_value)
tik_instance.vec_dup(64, a_ub[index*64:], dup_value, 1, 8)
with tik_instance.for_range(0, 2, name="index2") as index:  # 指定index的变量名
dup_value.set_as(b * dup_value)
tik_instance.vec_dup(64, a_ub[index*64:], dup_value, 1, 8)
tik_instance.vec_dup(64, a_ub[index*64:], dup_value, 1, 8)  # index超作用域
tik_instance.BuildCCE("test_for_range", inputs=[], outputs=[])
```


  编译时，报错信息如下图所示：


注意：

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

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