昇腾社区首页
中文
注册

算子仿真调优

算子调优工具支持性能仿真环境下的性能数据采集和自动解析。
表1 参数说明

启用参数

可选参数

描述

是否必选

op simulator

说明:
  • 开启算子仿真调优。使用msprof op simulator 可选参数 ./app [arguments]格式进行调用。
  • msprof工具的使用依赖CANN包中的msopprof可执行文件,该文件中的接口使用和msprof op一致,该文件为CANN包自带,无需单独安装。
  • 由于仿真器不支持多设备,如果调用算子的应用程序main.cpp或其他代码文件中配置使用了设备号deviceid,需要修改为0。

--application

说明:

当前与./app [arguments]兼容,后期将修改为./app [arguments]。

建议使用msprof op simulator ./app [arguments]进行拉取,其中app为指定的可执行文件,如果app未指定路径,默认为使用当前路径,[arguments]为app的参数。

是,指定的可执行文件和--config二选一

--config

配置为输入算子二进制文件*.o的json文件,可配置为绝对路径或者相对路径

具体可参考json配置文件说明

--kernel-name

指定要采集的算子名称,支持使用算子名前缀进行模糊匹配。如果不指定,则只对程序运行过程中调度的第一个算子进行采集。

说明:
  • 需与--application配合使用,限制长度为1024,仅支持A-Za-z0-9_中的一个或多个字符。
  • 需要采集多个算子时,支持使用符号"|"进行拼接。例如,--kernel-name="add|abs"表示采集前缀名为add和abs的算子。
  • 具体采集的算子数量由--launch-count参数值决定。

--launch-count

设置可以采集算子的最大数量,默认值为1,取值范围为1~100之间的整数。

--output

收集到的性能数据的存放路径,默认在当前目录下保存性能数据。

--help

输出帮助信息。

算子仿真调优可以通过以下两种方式执行:
  • 基于可执行文件
    msprof op simulator --output=./output_data ./add_custom_npu 
  • 基于输入算子二进制文件*.o的配置文件.json
    msprof op simulator --config=./add_test.json --output=./output_data

命令完成后,会在指定的“--output”目录下生成以“OPPROF_{timestamp}_XXX”命名的文件夹,结构示例如下:

  • 采集单个算子场景
    OPPROF_{timestamp}_XXX
    ├── dump
    │   ├── core0.veccore0.instr_log.dump
    │   ├── core0.veccore0.ifu.icache_log.dump
    │   └── ...
    └── simulator
        ├── api    // 热点函数信息所在目录
        │   ├── add_custom.cpp    
        │   └── api.json     
        ├── core0.veccore0       // 按照core*.veccore*或core*.cubecore*目录存放各核的数据文件
        │   ├── core0.veccore0_code_exe.csv
        │   ├── core0.veccore0_instr_exe.csv
        │   └── trace.json     // 该核的仿真指令流水图文件
        ├── core0.veccore1
        │   ├── core0.veccore1_code_exe.csv
        │   ├── core0.veccore1_instr_exe.csv
        │   └── trace.json
        ├── core1.veccore0
        │   ├── core1.veccore0_code_exe.csv
        │   ├── core1.veccore0_instr_exe.csv
        │   └── trace.json
        ├── ... 
        ├── visualize_data.bin 
        └── trace.json      // 全部核的仿真指令流水图文件
  • 采集多个算子场景
    └──OPPROF_{timestamp}_XXX
    ├── OpName1           // OpName1为采集算子名称
    │ ├── 0              // 表示算子调度到的顺序
    │ │ ├── dump        // 与单算子含义一致,存放过程件的文件夹
    │ │ └──simulator    // 与单算子simulation文件夹内容一致
    │ ├── 1
    │ │ ├── dump        // 与单算子含义一致,存放过程件的文件夹
    │ │ └──simulator
    ├── OpName2         
    │ ├── 0
    │ │ ├── dump       // 与单算子含义一致,存放过程件的文件夹
    │ │ └── simulator
  • dump文件夹:原始仿真生成的dump数据存放文件夹。
  • simulator文件夹:dump数据文件分析结果存放文件夹。
    • core*_code_exe.csv:代码行耗时,*代表0~n核,以便用户快速确定编写的代码中最耗时的部分,可参考代码行耗时数据文件
    • core*_instr_exe.csv:代码指令详细信息,*代表0~n核,以便用户快速确定最耗时的指令,可参考代码指令信息文件
    • trace.json:仿真指令流水图文件,包括每个核的子文件以及全部核的汇总文件,可参考仿真指令流水图文件
    • visualize_data.bin:仿真流水图和仿真热点函数等信息可视化呈现文件。
    • api.json:热点函数信息可视化数据文件。
    • add_custom.cpp:算子kernel侧实现文件。
  • 生成的热点函数文件api.json、算子代码实现文件add_custom.cpp以及仿真流水图和仿真热点函数等信息可视化呈现文件visualize_data.bin可通过Ascend Insight工具进行可视化展示,具体使用方法请参考《MindStudio Ascend Insight》
  • 采集多个算子的情况下,每个算子simulation文件夹中的csv文件均会增加时序后缀,例如core*_code_exe_20240429111143.csv。