目录

CPU孪生调试功能

功能介绍

  • 当开发者需要快速进行代码逻辑调试,可优先选择算子CPU调测。使用通用的打印、gdb调测手段,快速定位代码问题。

  • 在NPU板端上板运行之前,可优先选择算子CPU调测初步定位算子精度问题,提高算子NPU上板成功率。

CPU孪生调试主要基于开发者输入生成编译所需的二进制bin文件,然后自动执行算子编译和运行,该阶段支持的调测项如表1所示。

表1 CPU调测功能列表

功能名称 功能说明
自动精度比对 若开发者配置了标杆数据(golden数据),工具会自动将实际调测运行结果与标杆数据进行精度比对。
printf/PRINTF功能 支持屏显打印Scalar数据,如常量、字符串等信息,具体参考printf/PRINTF功能。
DumpTensor功能 支持dump Tensor数据,功能和产物与NPU上板dump功能类似,具体参考DumpTensor功能。
DumpAccChkPoint功能 支持dump偏移位置的Tensor数据,具体参考DumpAccChkPoint功能。
assert功能 支持屏显打印断言,具体参考assert功能。
CCE指令流打印 默认开启,CCE指令流文件参见产物说明。
gdb调试 可使用gdb单步调试算子计算精度。具体参考gdb调试。

使用方法(命令行)

通过命令行进行CPU调测的关键步骤如下。

  1. 完成环境搭建,并准备好输入/标杆数据文件。

  2. 执行如下命令进行CPU调测,这里仅提供关键参数项示例,其他参数请参考CPU调测参数按需设置。

    ascendebug kernel --backend cpu --chip-version ${chip_version} --repo-type customize --json-file ${op_config_json_file} --core-type ${core_type} --work-dir ${work_dir} ... {其他参数}

    CPU调测涉及的所有参数可通过ascendebug kernel -h或ascendebug kernel --help查看。

  3. 查看结果文件,详细说明参见产物说明。

产物说明

CPU调测结果存放在${root}/${work_dir}/cpu路径下,其中${root}表示当前操作路径,${work_dir}表示调测工作空间,默认为/debug_workspace/${op_type}目录,${op_type}为算子名。目录结构示例如下。

├ ${op_type} // 算子名
├── cpu
│   ├── build // 存放CPU编译生成的中间文件
│   │   ├── cceprint // 存放cce 指令流输出文件的目录
│   │   │   └── auto_gen_add_custom_kernel_0_0_mix.cce // cce指令流文件
│       ├── xxx_cpu // CPU编译生成的算子可执行程序
│   ├── output // 存放CPU编译运行的输出文件及精度比对结果
│       ├── y.bin // 运行输出原始数据
│       ├── y.txt // 精度比对结果文件
│   ├── src // 存放CPU编译生成的临时代码文件
│       ├── CMakeLists.txt
│       ├── data_definition.txt
│       ├── add_custom_main.cpp
│       ├── add_custom_tiling.h
│       ├── _gen_kernel_${op_type}.cpp
│   ├── dump // dump文件落盘目录
│       ├── PARSER_${timestamp}
│           ├── dump_data
│               ├──0 // 核心编号
│                   ├──index_1 // index是dump接口的desc唯一标识值
│                       ├──core_0_index_1_loop_0.bin
│                       ├──core_0_index_1_loop_0.txt