msobjdump工具

本工具主要针对Kernel直调工程(NPU模式)、简易自定义算子工程编译生成的算子ELF文件(Executable and Linkable Format)提供解析和解压功能,并将结果信息以可读形式呈现,方便开发者直观获得kernel文件信息。

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

产品支持情况

产品

是否支持

Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件

Atlas 200I/500 A2 推理产品

Atlas 推理系列产品

Atlas 训练系列产品

工具安装

  1. 安装msobjdump工具。

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

  2. 设置环境变量。

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

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

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

命令格式

表4 ELF解析字段说明(Kernel直调工程)

字段名

含义

是否必选

打印说明

VERSION

表示版本号。

不设置--verbose,默认打印。

TYPE COUNT

表示ELF文件中包含的kernel文件个数。

ELF FILE ${id}

表示ELF文件中包含的kernel文件名,${id}表示kernel文件序号。

kernel文件名的命名规则如下:

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

KERNEL LEN

表示kernel文件的长度。

KERNEL TYPE

表示kernel类型,映射关系为{0 : 'mix', 1: 'aiv', 2: 'aic'}。

ASCEND META

示算子执行时核间同步、Cube/Vector核占比(task_ration)等信息。

若没有获取到该信息,默认显示None。

elf heard infos

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

设置--verbose,开启全量打印。

表5 ELF解析字段说明(简易自定义算子工程)

字段名

含义

是否必选

打印说明

.ascend.meta. ${id}

表示算子kernel函数名称,其中${id}表示meta信息的索引值。

不设置--verbose,默认打印。

KERNEL_TYPE

表示kernel函数运行时core类型,取值参见表表6

CROSS_CORE_SYNC

表示硬同步syncall类型。

  • USE_SYNC:使用硬同步。
  • NO_USE_SYNC:不使用硬同步。

MIX_TASK_RATION

表示kernel函数运行时的Cube核/Vecor核占比分配类型。

elf heard infos

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

设置--verbose,开启全量打印。

表6 kernel type信息

KERNEL_TYPE

说明

AICORE

该参数为预留参数,当前版本暂不支持。

算子执行时仅会启动AI Core,比如用户在host侧设置blockdim为5,则会启动5个AI Core。

AIC

算子执行时仅启动AI Core上的Cube核:比如用户在host侧设置blockdim为10,则会启动10个Cube核。

AIV

算子执行时仅启动AI Core上的Vecor核:比如用户在host侧设置blockdim为10,则会启动10个Vecor核。

MIX_AIC_MAIN

AIC、AIV混合场景下,设置核函数的类型为MIX ,算子执行时会同时启动AI Core上的Cube核和Vector核,比如用户在host侧设置blockdim为10,且设置task_ration为1:2,则会启动10个Cube核和20个Vector核。

MIX_AIV_MAIN

AIC、AIV混合场景下,使用了多核控制相关指令时,设置核函数的类型为MIX,算子执行时会同时启动AI Core上的Cube核和Vector核,比如用户在host侧设置blockdim为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使用。

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

以MatMulInvocationNeo算子为例(NPU模式),完整的工程可参考Matmul多核Kernel直调样例。假设${cmake_install_dir}为算子Cmake编译产物根目录,目录结构如下(仅为示例,具体以实际算子工程为准),类似CMake编译配置文件编写

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编译产物根目录,目录结构如下,类似算子编译

├── op_api
│   ├── include
│       ├── aclnn_acos_custom.h
│       ├── aclnn_matmul_leakyrelu_custom.h
│       ├── .........
│   ├── lib
│       ├── libcust_opapi.so

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