F6XXXX#

F62014 SYMBOL_NOT_FOUND#

错误描述

Kernel代码生成阶段变量未定义,日志上下文含UNDEFINED_VAR关键字。

可能原因

  • 子图中的Operation缺少need_alloc属性。CodeGen依赖该属性生成变量定义语句,缺失导致变量定义缺失。

处理方式

  1. 设置日志级别为INFO

    export ASCEND_PROCESS_LOG_PATH=<用户指定日志路径>
    export ASCEND_GLOBAL_LOG_LEVEL=1  # 0:DEBUG, 1:INFO, 2:WARN, 3:ERROR
    
  2. 并行编译改为串行:修改tile_fwk_config.json"parallel_compile": 1,重编安装。

  3. 执行用例,获取日志及kernel代码

    • 日志:{日志路径}/debug/plog/pypto-log*.log

    • Kernel代码:搜索kernel_aicore/文件夹内TENSOR*.cpp

  4. 分析日志

    • F60XXX / F61XXX类错误 → 一般为上游数据异常,结合PASS日志分析。

    • 其他类型 → 结合上下文分析。

示例:以kernel代码中TileOp调用参数不符合预期为例。

  1. 按上述步骤收集日志。

  2. 找到不符合预期的TileOp调用,如:

    TAdd<LastUse3Dim<0, 1, 1>>(ubTensor_0, ubTensor_0, ubTensor_2);
    
  3. 以上述代码为关键字搜索日志。

  4. 往上找第一个Op CodeGenNPU Start,即该TileOp生成起点,向后逐行检查。

  5. 若怀疑PASS数据问题,搜索Gen OP IS获取Operation Dump信息:

    Gen OP IS: <2 x 2 x 16 x 16 x DT_FP32> %152@5#(0)MEM_UB = !10010 TILE_ADD(...) ...
    

    其中!10010为该OP唯一标识码,可在PASS图或日志中搜索。PASS定位详见 pass.md

F63001 COMPILE_CODE_FAILED#

错误描述

Kernel代码编译失败。

若bisheng编译器报错日志不完整,可在日志中找到compile cmd is:后的make命令,手工执行以获取完整错误信息。

可能原因

  • 堆栈溢出error: stack frame size exceeds limit):函数栈帧超过限制。

  • PTO指令数据类型不匹配the 2nd parameter maybe need a type):前端接口参数传递错误,或使用了PTO-ISA不支持的数据类型。

  • 硬件指令与平台不匹配does not support the given target feature):编译参数为Vector但代码含Cube指令(或反之)。

  • 变量未定义use of undeclared identifier):运行时动态Shape/Offset变量缺失,数据来源于Function::GetDynParamTable

处理方式

  1. 堆栈溢出:参考 算子编译报堆栈溢出错误

  2. 数据类型不支持:重新分析算子计算流程,选用硬件支持的数据类型。

  3. 指令与平台不匹配:

    • 确认Block子图是否纯Vector或纯Cube(CodeGen不得混用)。

    • 确认PASS对Function::IsCube()的设置是否正确。

  4. 变量未定义:联合PASS排查Function::GetDynParamTable返回的变量集合是否存在遗漏。

编译时长统计#

整体耗时#

执行算子后屏幕输出Compiler Monitor统计:

[Compiler Monitor] Stage: CodeGen(completed) | Stage elapsed: 1.2s | Total elapsed: 1.2s
[Compiler Monitor] Compilation finished 6/6 | Total functions: 6
[Compiler Monitor] Stage timing (aggregated by stage):
  CodeGen  1.2s   (sum over 6 functions)
  Pass     0.0s   (sum over 6 functions)
  Prepare  0.0s

单kernel文件编译时长#

  1. kernel_aicore/下找到目标TENSOR*.cpp,文件底部复制bisheng编译命令。

  2. cd到output上一层目录,执行该命令确认可行。

  3. time统计:

    time bisheng -c -O3 -g -x cce ... -o .../TENSOR_xxx.o .../TENSOR_xxx.cpp
    
  4. 若编译时间较长且单kernel文件超过5K行,联合PASS考虑调整子图切分。