使用前准备
添加编译选项(可选)
用户可根据需求自行选择是否添加编译选项,具体请参见表1。
是否添加编译选项 |
支持的指令 |
功能差异 |
用途 |
---|---|---|---|
不添加 |
与GM相关的搬运指令 |
|
该场景支持的功能上有限制,仅适用于对算子内存异常中的非法读写和非对齐访问异常的快速定界。 |
添加 |
全量指令 |
|
通过不添加编译选项的功能快速定位异常算子后,再添加编译选项对异常算子进行全量检测,具体操作请参见开启全量检测。 |
开启全量检测
如需要开启全量检测,需要在算子代码的编译阶段增加编译选项,不同算子工程添加编译选项的位置不同,下面以内核调用符场景和msOpGen算子工程编译场景准备为例进行介绍:
- 内核调用符场景
- 算子代码的编译选项需添加 -g --cce-enable-sanitizer。编辑样例工程目录下的“cmake/npu/CMakeLists.txt”文件,单击LINK参考核函数开发和运行验证的完整样例。
target_compile_options(${smoke_testcase}_npu PRIVATE -O2 -std=c++17 --cce-enable-sanitizer -g )
增加 --cce-enable-sanitizer 选项代表使能异常检测。
增加 -g 选项使编译器生成定位信息,将会在异常报告输出时显示异常发生的具体位置(文件名、行号以及调用栈等信息)。
- 此样例工程不支持。
- 下载代码样例时,需执行以下命令指定分支版本。
git clone https://gitee.com/ascend/samples.git -b 8.0.RC2
- --cce-enable-sanitizer和-O0同时开启的情况下,需要增加编译选项 --cce-ignore-always-inline=false。
- 添加 -g 编译选项会在生成的二进制文件中附带调试信息,建议限制带有调试信息的用户程序的访问权限,确保只有授权人员可以访问该二进制文件。
- 因 llvm-symbolizer 开源软件限制,调用栈的异常信息可能会获取失败。此时,用户可再次执行检测命令,就可以获取调用栈的异常信息。
- 链接阶段需增加target_link_options选项。
- 编辑样例工程目录下的“cmake/npu/CMakeLists.txt”文件。
target_link_options(${smoke_testcase}_npu PRIVATE --cce-fatobj-link --cce-enable-sanitizer )
- 编辑样例工程目录下的“cmake/Modules/CMakeCCEInformation.cmake”文件。
if(NOT CMAKE_CCE_LINK_EXECUTABLE) set(CMAKE_CCE_LINK_EXECUTABLE "<CMAKE_CCE_COMPILER> ${CMAKE_LIBRARY_CREATE_CCE_FLAGS} ${_CMAKE_COMPILE_AS_CCE_FLAG} <FLAGS> <CMAKE_CCE_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>${__IMPLICIT_LINKS}") endif()
- 编辑样例工程目录下的“cmake/npu/CMakeLists.txt”文件。
- 启用msSanitizer检测工具时需要加载NPU侧可执行文件<kernel_name>_npu,该文件的获取可参考Kernel直调。
- 算子代码的编译选项需添加 -g --cce-enable-sanitizer。
- msOpGen算子工程编译场景
- 单击Link,在${git_clone_path}/samples/operator/ascendc/0_introduction/1_add_frameworklaunch目录下运行install.sh脚本,生成自定义算子工程 。下载代码样例时,需执行以下命令指定分支版本。
1
git clone https://gitee.com/ascend/samples.git -b v1.0-8.1.RC1.alpha001
1
bash install.sh -v Ascendxxxyy # xxxyy为用户实际使用的具体芯片类型
- 切换至自定义算子工程目录。
1
cd CustomOp
- 编辑样例工程目录下的“op_kernel/CMakeLists.txt”文件,在编译选项中添加-sanitizer选项,具体请参考支持自定义编译选项。
1
add_ops_compile_options(ALL OPTIONS -sanitizer)
- 单击Link,在${git_clone_path}/samples/operator/ascendc/0_introduction/1_add_frameworklaunch目录下运行install.sh脚本,生成自定义算子工程 。
启动工具
环境准备和添加编译选项(可选)完成后,请参见启用内存检测和启用竞争检测章节使能msSanitizer工具的相关功能。
父主题: 异常检测(msSanitizer)