CPU域调试

本节介绍CPU域调试的方法:gdb调试、使用printf打印命令打印。

本节提供的调试方法基于核函数运行验证章节中的算子程序进行调试,请先完成核函数运行验证章节的学习。

CPU调测过程中,配置日志相关环境变量,可以记录程序的运行过程及异常信息,有助于开发者进行功能调测。

关于环境变量的使用约束以及详细说明,可参见日志

gdb调试

可使用gdb单步调试算子计算精度。由于cpu调测已转为多进程调试,每个核都会拉起独立的子进程,故gdb需要转换成子进程调试的方式。针对Atlas 推理系列产品(Ascend 310P处理器)Atlas 训练系列产品,每个核会拉起1个子进程。针对Atlas A2训练系列产品/Atlas 800I A2推理产品,每个核会拉起3个子进程,1个Cube,2个Vector。

如下是调试一个单独子进程的调试命令样例:

gdb --args add_custom_cpu
set follow-fork-mode child
break add_custom.cpp:45
run
list
backtrace
print i
break add_custom.cpp:56
continue
display xLocal
quit

使用printf打印命令打印

在代码中直接编写printf(...)来观察数值的输出。注意:NPU模式下目前不支持打印语句,所以需要添加内置宏__CCE_KT_TEST__予以区分。样例代码如下:
printf("xLocal size: %d\n", xLocal.GetSize()); 
printf("tileLength: %d\n", tileLength);