Skip to content

msobjdump工具

本工具主要针对工程编译生成的算子ELF文件(Executable and Linkable Format)提供解析和解压功能,并将结果信息以可读形式呈现,方便开发者直观获得kernel文件信息。当前支持解析融合编译工程和自定义算子工程生成的相关产物。

说明

  • ELF文件是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储的文件格式,包括常见的*.a、*.so文件等。ELF文件常见构成如下:
    • ELF头部:描述了整个文件的组织结构,包括文件类型、机器类型、版本号等信息。
    • 程序头部表:描述了文件中各种段(segments)信息,包括程序如何加载到内存中执行的信息。
    • 节区头部表:描述了文件中各个节(sections)信息,包括程序的代码、数据、符号表等。
  • 工具使用过程中,若出现如下场景,请根据日志提示信息,分析排查问题。
    • ELF文件未找到
    • ELF文件权限错误
    • ELF文件存在但不支持解析或解压

产品支持情况

  • Ascend 950PR/Ascend 950DT:支持
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
  • Atlas 200I/500 A2 推理产品:支持
  • Atlas 推理系列产品:支持
  • Atlas 训练系列产品:支持

工具安装

  1. 安装msobjdump工具。

    工具跟随CANN软件包发布(参考环境准备完成CANN安装),其路径默认为${INSTALL_DIR}/tools/msobjdump,其中${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例,安装后文件默认存储路径为:/usr/local/Ascend/cann。

  2. 设置环境变量。

    • root用户安装Ascend-cann-toolkit包时

      Text
      source /usr/local/Ascend/cann/set_env.sh
      
    • 非root用户安装Ascend-cann-toolkit包时

      Text
      source ${HOME}/Ascend/cann/set_env.sh
      
  3. 检查工具是否安装成功。

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

    Text
    msobjdump -h
    

命令格式

  • 解析ELF文件的命令

    Text
    msobjdump --dump-elf <elf_file> [--verbose]
    

    表1 参数说明

    参数(区分大小写)可选/必选说明
    --dump-elf <elf_file>-d必选解析ELF文件中包含的device信息,如文件名、文件类型、文件长度、符号表等,并终端打屏显示。
    <elf_file>表示待解析ELF文件路径,如/home/op_api/lib_api.so。支持两种打印模式:
    简单打印:默认仅打印部分device信息。
    全量打印:与--verbose配套使用,开启全量device信息打屏显示。
    融合编译工程和自定义算子工程的打印字段分别参见表4表5
    --verbose-V可选必须与--dump-elf配套使用,用于开启ELF文件中全量打印device信息功能。
  • 解压ELF文件的命令

    Text
    msobjdump --extract-elf <elf_file> [--out-dir <out_path>]
    

    表2 参数说明

    参数(区分大小写)可选/必选说明
    --extract-elf <elf_file>-e必选解压ELF文件中包含的device信息,并按解析结果落盘到输出路径下。
    <elf_file>表示待解压ELF文件路径,如/home/op_api/lib_api.so
    默认路径:解压结果文件默认落盘到当前执行路径下。
    自定义路径:可与--out-dir配套使用,设置落盘路径。
    --out-dir <out_path>-o可选必须与--extract-elf配套使用,用于设置解压文件的落盘路径。
    <out_path>为落盘文件目录,如/home/extract/
    请注意msobjdump支持多用户并发调用,但需要指定不同的--out-dir,否则可能出现落盘内容被覆盖的问题。
  • 获取ELF文件列表的命令

    Text
    msobjdump --list-elf <elf_file>
    

    表3 参数说明

    参数(区分大小写)可选/必选说明
    --list-elf <elf_file>-l必选获取ELF文件中包含的device信息文件列表,并打印显示。
    <elf_file>表示待打印的ELF文件路径,如/home/op_api/lib_api.so

表4 融合编译工程支持的ELF解析字段说明

字段名含义是否必选打印说明
.ascend.meta. ${id}表示算子kernel函数名称,其中${id}表示meta信息的索引值。不设置--verbose,默认打印。
VERSION表示版本号。不设置--verbose,默认打印。
RUNTIME_IMPLICIT_INFO表示运行时隐式信息标志。取值如下:
1SIMD Printf Flag,表示SIMD侧Printf标志。
2Hardware Sync Flag,表示硬同步标志。
3L2Cache Hint Flag,表示L2 Cache命中标志。
4SIMT Printf Flag,表示SIMT侧Printf标志。
5SIMD Assert Flag,表示SIMD侧Assert标志。
其他取值打印原始数值。
不设置--verbose,默认打印。
KERNEL_TYPE表示kernel函数运行时core类型,取值参见表6不设置--verbose,默认打印。
CROSS_CORE_SYNC表示硬同步syncall类型。
USE_SYNC:使用硬同步。
NO_USE_SYNC:不使用硬同步。
Ascend 950PR/Ascend 950DT:不支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
Atlas 200I/500 A2 推理产品:不支持
Atlas 推理系列产品:不支持
Atlas 训练系列产品:不支持
不设置--verbose,默认打印。
MIX_TASK_RATION表示kernel函数运行时的Cube核/Vector核占比分配类型。不设置--verbose,默认打印。
elf header infos包括ELF Header、Section Headers、Key to Flags、Program Headers、Symbol表等信息。设置--verbose,开启全量打印。

表5 自定义算子工程支持的ELF解析字段说明

字段名含义是否必选打印说明
.ascend.meta. ${id}表示算子kernel函数名称,其中${id}表示meta信息的索引值。不设置--verbose,默认打印。
VERSION表示版本号。
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
Atlas 200I/500 A2 推理产品:不支持
Atlas 推理系列产品:不支持
Atlas 训练系列产品:不支持
不设置--verbose,默认打印。
DEBUG调试相关信息,包含如下两部分内容:
debugBufSize:调试信息需要的内存空间。
debugOptions:调试开关状态。取值如下:
0:调试开关关闭。
1:通过DumpTensor、printf打印进行调试。
2:通过assert断言进行调试。
4:通过时间戳打点功能进行调试。
8:通过内存越界检测进行调试。
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
Atlas 200I/500 A2 推理产品:不支持
Atlas 推理系列产品:不支持
Atlas 训练系列产品:不支持
不设置--verbose,默认打印。
DYNAMIC_PARAM算子kernel函数是否启用动态参数。取值分别为:
0:关闭动态参数模式。
1:开启动态参数模式。
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
Atlas 200I/500 A2 推理产品:不支持
Atlas 推理系列产品:不支持
Atlas 训练系列产品:不支持
不设置--verbose,默认打印。
OPTIONAL_PARAM可选参数信息,包含如下两部分内容:
optionalInputMode:可选输入在算子kernel函数中是否需要占位。
0:可选输入不占位。
1:可选输入占位。
optionalOutputMode:可选输出在算子kernel函数中是否需要占位。
0:可选输出不占位。
1:可选输出占位。
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
Atlas 200I/500 A2 推理产品:不支持
Atlas 推理系列产品:不支持
Atlas 训练系列产品:不支持
不设置--verbose,默认打印。
RUNTIME_IMPLICIT_INFO表示运行时隐式信息标志。取值如下:
1SIMD Printf Flag,表示SIMD侧Printf标志。
2Hardware Sync Flag,表示硬同步标志。
3L2Cache Hint Flag,表示L2 Cache命中标志。
4SIMT Printf Flag,表示SIMT侧Printf标志。
5SIMD Assert Flag,表示SIMD侧Assert标志。
其他取值打印原始数值。
不设置--verbose,默认打印。
KERNEL_TYPE表示kernel函数运行时core类型,取值参见表6不设置--verbose,默认打印。
CROSS_CORE_SYNC表示硬同步syncall类型。
USE_SYNC:使用硬同步。
NO_USE_SYNC:不使用硬同步。
Ascend 950PR/Ascend 950DT:不支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
Atlas 200I/500 A2 推理产品:不支持
Atlas 推理系列产品:不支持
Atlas 训练系列产品:不支持
不设置--verbose,默认打印。
MIX_TASK_RATION表示kernel函数运行时的Cube核/Vector核占比分配类型。不设置--verbose,默认打印。
DETERMINISTIC_INFO表示算子是否为确定性计算。
0:不确定计算。
1:确定性计算。
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
Atlas 200I/500 A2 推理产品:不支持
Atlas 推理系列产品:不支持
Atlas 训练系列产品:不支持
不设置--verbose,默认打印。
BLOCK_NUM表示算子执行核数,该字段当前暂不支持实际执行核数的打印,只打印默认值0xFFFFFFFF
Ascend 950PR/Ascend 950DT:支持打印默认值
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
Atlas 200I/500 A2 推理产品:不支持
Atlas 推理系列产品:不支持
Atlas 训练系列产品:不支持
不设置--verbose,默认打印。
FUNCTION_ENTRY算子TilingKey的值。
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
Atlas 200I/500 A2 推理产品:不支持
Atlas 推理系列产品:不支持
Atlas 训练系列产品:不支持
不设置--verbose,默认打印。
elf header infos包括ELF Header、Section Headers、Key to Flags、Program Headers、Symbol表等信息。设置--verbose,开启全量打印。

表6 kernel type信息

KERNEL_TYPE说明
AICORE该参数为预留参数,当前版本暂不支持。
算子执行时仅会启动AI Core,比如用户在host侧设置blocknum为5,则会启动5个AI Core。
AIC算子执行时仅启动AI Core上的Cube核,比如用户在host侧设置blocknum为10,则会启动10个Cube核。
AIV算子执行时仅启动AI Core上的Vector核,比如用户在host侧设置blocknum为10,则会启动10个Vector核。
MIX_AIC_MAINAIC、AIV混合场景下,设置核函数(Kernel)的类型为MIX,算子执行时会同时启动AI Core上的Cube核和Vector核,比如用户在host侧设置blocknum为10,且设置task_ration为1:2,则会启动10个Cube核和20个Vector核。
MIX_AIV_MAINAIC、AIV混合场景下,使用了多核控制相关指令时,设置核函数(Kernel)的类型为MIX,算子执行时会同时启动AI Core上的Cube核和Vector核,比如用户在host侧设置blocknum为10,且设置task_ration为1:2,则会启动10个Vector核和20个Cube核。
AIC_ROLLBACK算子执行时会同时启动AI Core和Vector Core,此时AI Core会当成Cube Core使用。
AIV_ROLLBACK算子执行时会同时启动AI Core和Vector Core,此时AI Core会当成Vector Core使用。

使用样例(融合编译工程)

以融合编译工程生成的可执行文件为例,假设${build_dir}为工程构建目录,编译生成的可执行文件名为demo。对于该类产物,工具会基于可执行文件中的device相关信息进行解析,其中--dump-elf用于展示binary meta与function meta信息,--list-elf用于查看可提取的device文件名,--extract-elf用于将解析出的device文件落盘。调用样例可参考msobjdump样例

  • 解析融合编译工程产物

    支持两种打印方式,请按需选取,解析字段含义参见表4

    • 简单打印

      Text
      msobjdump --dump-elf ${build_dir}/demo
      

      执行上述命令,终端打印基础device信息,示例如下:

      Text
      .ascend.meta META INFO
      RUNTIME_IMPLICIT_INFO: L2Cache Hint Flag
      RUNTIME_IMPLICIT_INFO: Hardware Sync Flag
      VERSION: 1
      RUNTIME_IMPLICIT_INFO: SIMD Printf Flag
      .ascend.meta. [0]: _Z23matmul_leakyrelu_customPhS_S_S_S_N7AscendC6tiling11TCubeTilingE_mix_aic
      KERNEL_TYPE: MIX_AIC_MAIN
      CROSS_CORE_SYNC: USE_SYNC
      MIX_TASK_RATION: [1:2]
      .ascend.meta. [1]: _Z23matmul_leakyrelu_customPhS_S_S_S_N7AscendC6tiling11TCubeTilingE_mix_aiv
      KERNEL_TYPE: MIX_AIC_MAIN
      CROSS_CORE_SYNC: USE_SYNC
      MIX_TASK_RATION: [1:2]
      
    • 全量打印

      Text
      msobjdump --dump-elf ${build_dir}/demo --verbose
      

      执行上述命令,除基础device信息外,还会打印提取出的device文件对应的ELF详细信息,示例如下:

      Text
      ====== [elf header infos] ======
      ELF Header:
        Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
        Class:                             ELF64
        Data:                              2's complement, little endian
        Version:                           1 (current)
        OS/ABI:                            UNIX - System V
        ABI Version:                       0
        Type:                              EXEC (Executable file)
        Machine:                           <unknown>: 0x1029
        Version:                           0x1
        Entry point address:               0x0
        Start of program headers:          64 (bytes into file)
        Start of section headers:          33504 (bytes into file)
        Flags:                             0x940000
        Size of this header:               64 (bytes)
        Size of program headers:           56 (bytes)
        Number of program headers:         3
        Size of section headers:           64 (bytes)
        Number of section headers:         16
        Section header string table index: 14
      
      Section Headers:
        [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
        [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
        [ 1] .text             PROGBITS        0000000000000000 0000e8 006c94 00  AX  0   0  4
        ......................................................................................
        [15] .strtab           STRTAB          0000000000000000 007ce0 0005fc 00      0   0  1
      Key to Flags:
        W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
        L (link order), O (extra OS processing required), G (group), T (TLS),
        C (compressed), x (unknown), o (OS specific), E (exclude),
        D (mbind), p (processor specific)
      
      There are no section groups in this file.
      
      Program Headers:
        Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
        LOAD           0x0000e8 0x0000000000000000 0x0000000000000000 0x006ca7 0x006ca7 R E 0x1000
        LOAD           0x0070e8 0x0000000000007000 0x0000000000007000 0x000210 0x000210 RW  0x1000
        GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW  0
      
      ......
      
  • 获取融合编译工程产物中的device文件列表

    Text
    msobjdump --list-elf ${build_dir}/demo
    

    执行上述命令,终端会打印可提取的device文件名,屏显信息形如:

    Text
    ELF file    0: demo.aicore.o
    
  • 解压融合编译工程产物中的device文件并落盘

    Text
    msobjdump --extract-elf ${build_dir}/demo
    

    执行上述命令,默认在当前执行路径下落盘demo.aicore.o文件。若需要指定输出路径,可配合--out-dir使用。

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

自定义算子工程样例中的AddCustom算子为例。若样例根目录为${sample_dir},执行如下命令:

Bash
cd ${sample_dir}
mkdir -p build && cd build
cmake .. && make -j binary package

编译后,AddCustom算子的Device侧ELF文件位于build/op_kernel/ascendc_kernels/binary/${soc_version}/add_custom/目录。文件名中的哈希值由编译输入生成,以实际产物为准。解析字段含义参见表5

Bash
msobjdump --dump-elf ${sample_dir}/build/op_kernel/ascendc_kernels/binary/ascend950/add_custom/AddCustom_*.o

执行上述命令,终端打印基础device信息,示例如下:

Text
.ascend.meta META INFO
VERSION: 1
DEBUG: debugBufSize=0, debugOptions=0
DYNAMIC_PARAM: dynamicParamMode=0
OPTIONAL_PARAM: optionalInputMode=1, optionalOutputMode=1
.ascend.meta. [0]: AddCustom_ab1b6750d7f510985325b603cb06dc8b_0
KERNEL_TYPE: AIV
DETERMINISTIC_INFO: 1
BLOCK_NUM: 0xFFFFFFFF
FUNCTION_ENTRY: 0

如需查看ELF头、Section和Symbol等详细信息,可在上述命令中增加--verbose参数。

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区