msobjdump工具

本工具针对任意场景下算子编译生成的ELF文件(Executable and Linkable Format)提供解析和解压功能,并将结果信息以可读格式呈现,方便开发者直观获得kernel文件信息。

ELF文件是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储的文件格式,包括常见的*.a、*.so文件等。ELF文件构成如下:

  • ELF头部:描述了整个文件的组织结构,包括文件类型、机器类型、版本号等信息。
  • 程序头部表:描述了文件中各种段(segments)信息,包括程序如何加载到内存中执行的信息。
  • 节区头部表:描述了文件中各个节(sections)信息,包括程序的代码、数据、符号表等。

ELF文件主要用于Linux和其他类Unix操作系统中,用于程序的执行和链接。

工具安装

  1. 安装msobjdump工具。

    工具跟随CANN软件包发布(参考环境准备完成CANN安装),其路径默认为“${INSTALL_DIR}/tools/ascendc_tools/msobjdump”,其中${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。例如,若安装的Ascend-cann-toolkit软件包,则安装后文件存储路径为:$HOME/Ascend/ascend-toolkit/latest。

  2. 设置环境变量。

    • root用户安装Ascend-cann-toolkit包时
      1
      2
      source /usr/local/Ascend/ascend-toolkit/set_env.sh
      source /usr/local/Ascend/ascend-toolkit/latest/toolkit/bin/setenv.bash
      
    • 非root用户安装Ascend-cann-toolkit包时
      1
      2
      source ${HOME}/Ascend/ascend-toolkit/set_env.sh
      source ${HOME}/Ascend/ascend-toolkit/latest/toolkit/bin/setenv.bash
      

  3. 检查工具是否安装成功。

    执行如下命令,若能正常显示--help或-h信息,则表示工具环境正常,功能可正常使用。
    1
    msobjdump -h
    

功能介绍

工具全量命令参数说明请参考表1

表1 msobjdump参数说明

功能参数

(区分大小写)

功能说明

是否必选

-d,--dump-elf

解析ELF文件中包含的每个device.o文件的文件长度、 文件类型、符号表等信息,并在终端屏显,关键字段含义参见表2

三选一,必选

-e,--extract-elf

解压ELF文件中包含的每个device.o/device.json文件,并按原始文件夹规则落盘到输出路径下。

若未指定--out-dir参数,默认落盘到当前执行路径下。

-l,--list-elf

打屏显示输ELF文件中包含的device.o文件列表。

-o,--out-dir

解压文件的落盘路径, 需要与--extract-elf参数配套使用。

说明:

msobjdump支持多用户并发调用,但需要指定不同的--out-dir,否则可能出现落盘内容被覆盖的问题。

表2 ELF解析字段说明

关键字段

说明

是否必选

VERSION

版本号。

TYPE COUNT

当前section段包含的kernel文件个数。

ELF FILE ${id}

罗列的kernel文件,文件名是按照 ${sec_prefix}_${file_index}_${kernel_type}.o 拼接而成,其中${sec_prefix}为section段名(工具根据“.ascend.kernel”关键字搜索获取),${file_index}表示文件编号,${kernel_type}表示kernel类型。

KERNEL TYPE

当前kernel文件的类型,映射关系为{0 : 'mix', 1: 'aiv', 2: 'aic'}。

KERNEL LEN

当前kernel文件的长度。

elf heard infos

包括ELF Header、Section Headers、Key to Flags、Program Headers、Symbol表等信息。

使用样例(Kernel直调算子工程)

以MatMulInvocationNeo算子为例(单击Link获取样例工程),假设${cmake_install_dir}为算子Cmake编译产物根目录,产物目录结构如下,类似CMake编译配置文件编写

1
2
3
4
5
6
7
out
├── lib 
   ├── libascendc_kernels_npu.so
├── include
   ├── ascendc_kernels_npu
           ├── aclrtlaunch_matmul_custom.h
           ├── aclrtlaunch_triple_chevrons_func.h

工具对编译生成的库文件(如*.so、*.a等)进行解析和解压,功能实现命令样例如下:

使用样例(简易自定义算子工程)

以下面的算子工程为例,假设${cmake_install_dir}为算子Cmake编译产物根目录,产物目录结构如下,类似算子工程编译

1
2
3
4
5
6
7
├── op_api
   ├── include
       ├── aclnn_acos_custom.h
       ├── aclnn_matmul_leakyrelu_custom.h
       ├── .........
   ├── lib
       ├── libcust_opapi.so

工具对编译生成的库文件(如*.so、*.a等)进行解析和解压,功能实现命令样例如下: