使用竞争检测

启用竞争检测

运行mssanitizer工具时,启用竞争检测工具racecheck,执行如下命令:
mssanitizer --tool=racecheck ./<kernel_name>_npu

mssanitizer --tool=racecheck python3 test_ops_custom.py

./<kernel_name>_npu为NPU侧可执行文件所在路径,可配置为相对路径或绝对路径。

可在自定义算子调用脚本test_ops_custom.py所在路径执行命令,或者配置为脚本的相对路径或绝对路径。

  • 竞争检测不会执行内存错误检查,建议用户首先运行内存检测,确保算子程序能够正常执行,没有运行异常。
  • 当用户程序运行完成后,界面将会打印异常报告,异常的具体含义见竞争检测报告解析
  • 启动工具后,将会在当前目录下自动生成工具操作日志文件mssanitizer__{timestamp}_XXX.log。

竞争检测报告解析

竞争检测工具会输出一系列信息,详细说明有关算子各 PIPE 之间存在的内存数据竞争访问风险。

========= ERROR: Potential RAW hazard detected at core0 in UB :       // 竞争事件类型、AICore信息以及异常内存块信息
=========     PIPE_V Write at RAW()+0xf280 in add_custom.cpp:520      // 竞争事件的详细信息,包含该事件所在的 PIPE、操作类型、内存访问起始地址以及代码执行所在文件名及行号 
=========     PIPE_MTE3 Read at RAW()+0xf280 in add_custom.cpp:498

以上示例中表示了AICore 0中存在对UB的先写后读竞争风险,PIPE_V 流水中存在对“Oxf280”地址的写入操作事件,该操作对应算子实现文件add_custom.cpp中的第520行,PIPE_MTE3流水中存在对“0xf280”地址的读取操作事件,该操作对应算子实现文件add_custom.cpp中的第498行。