下载
EN
注册

NPU域上板调试

通过DumpTensor、printf打印进行调试

NPU域上板数据打印功能包括DumpTensor、printf两种,其中DumpTensor用于打印指定Tensor的数据,printf主要用于打印标量和字符串信息。

该功能仅在如下场景支持

  • 通过单算子API调用方式调用算子。
  • 间接调用单算子API(aclnnxxx)接口:Pytorch框架单算子直调的场景。

具体的使用方法如下:

在算子kernel侧实现代码中需要输出日志信息的地方调用DumpTensor接口或者printf接口打印相关内容。
  • DumpTensor示例,srcLocal表示待打印的Tensor;5表示用户的自定义附加信息,比如当前的代码行号;dataLen表示元素个数。DumpTensor接口的使用说明和具体约束请参考DumpTensor
    DumpTensor(srcLocal,5, dataLen);

    Dump时,每个block核的dump信息前会增加对应信息头DumpHead(32字节大小),用于记录核号和资源使用信息;每次Dump的Tensor数据前也会添加信息头DumpTensorHead(32字节大小),用于记录Tensor的相关信息。打印结果的样例如下:

    DumpHead: block_id=0, total_block_num=16, block_remain_len=1048448, block_initial_space=1048576, magic=5aa5bccd
    DumpTensor: desc=5, addr=0, data_type=DT_FLOAT16, position=UB
    [40, 82, 60, 11, 24, 55, 52, 60, 31, 86, 53, 61, 47, 54, 34, 62, 84, 29, 48, 95, 16, 0, 20, 77, 3, 55, 69, 73, 75, 40, 35, 13]
    DumpHead: block_id=1, total_block_num=16, block_remain_len=1048448, block_initial_space=1048576, magic=5aa5bccd
    DumpTensor: desc=5, addr=0, data_type=DT_FLOAT16, position=UB
    [58, 84, 22, 54, 41, 93, 1, 45, 50, 9, 72, 81, 23, 96, 86, 45, 36, 9, 36, 34, 78, 7, 2, 29, 47, 26, 13, 24, 27, 55, 90, 5]
    ...
    DumpHead: block_id=7, total_block_num=16, block_remain_len=1048448, block_initial_space=1048576, magic=5aa5bccd
    DumpTensor: desc=5, addr=0, data_type=DT_FLOAT16, position=UB
    [28, 27, 79, 39, 86, 5, 23, 97, 89, 5, 65, 69, 59, 13, 49, 2, 34, 6, 52, 38, 4, 90, 11, 11, 61, 50, 71, 98, 19, 54, 54, 99]
  • printf示例如下,printf接口的使用说明和具体约束请参考printf
    printf("fmt string %d", 0x123);

DumpTensor、printf接口打印功能会对算子实际运行的性能带来一定影响,通常在调测阶段使用。开发者可以按需关闭打印功能。具体方法请参考DumpTensorprintf

NPU模式下的性能采集与分析

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

基于NPU域算子的调用接口(<<<>>>内核调用符)编写的算子程序,通过毕昇编译器编译后生成可执行程序,运行可执行程序,可以完成算子NPU域的运行验证。使用性能采集工具运行NPU模式下生成的可执行文件从而采集Ascend C算子在AI处理器上执行的性能数据,进行性能精细调优。性能分析工具的具体使用方法请参考性能分析工具使用指南