---
title: 性能调优
description: "通过毕昇编译器编译生成可执行程序后，使用msProf工具运行NPU模式下生成的可执行文件，可以采集Ascend C算子在AI处理器上执行的性能数据，进行性能精细调优。- Profiling性能数据采集：使用msprof工具采集Ascend C算子在AI 处理器上执行的性能数据。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/Ascendcopdevg/atlas_ascendc_10_00059.html
sourcePath: /source/zh/canncommercial/900/programug/Ascendcopdevg/atlas_ascendc_10_00059.html
indexId: fa7355d98182d56e23c76c97f1e28d05ac370c113c89df03cf8a6346011b12c081
---
# 性能调优

#### 性能采集与分析工具

通过毕昇编译器编译生成可执行程序后，使用msProf工具运行NPU模式下生成的可执行文件，可以采集Ascend C算子在AI处理器上执行的性能数据，进行性能精细调优。- Profiling性能数据采集：使用msprof工具采集Ascend C算子在AI 处理器上执行的性能数据。
- Roofline瓶颈分析：通过msprof op生成的visualize_data.bin文件可通过MindStudio Insight进行可视化呈现，Roofline瓶颈分析图可构建出处理器的性能模型，然后利用该性能模型快速评估出算子的理论性能极限，协助开发者快速识别瓶颈类型。
- 指令流水图分析：通过msprof op simulator生成visualize_data.bin文件或trace.json文件，并进行可视化呈现。指令流水图以指令维度展示时序关系，并关联调用栈快速定位瓶颈位置。


性能调优工具的具体使用方法请参考算子调优（msProf）(https://www.hiascend.com/document/detail/zh/canncommercial/900/devaids/optool/docs/zh/user_guide/msopprof_user_guide.md)。


#### NPU域上板性能调优

算子程序通过毕昇编译器编译生成可执行程序后，可以通过msprof op在NPU上完成性能采集。以SIMD编程场景为例，使用msprof工具采集上板性能数据大致步骤如下：

1. 参考AI Core SIMD编译，编译add算子样例，生成可执行文件。
  dav-后为NPU架构版本号，请根据实际情况进行替换，各产品型号对应的架构版本号请通过对应关系表进行查询。

  1 bisheng add_custom.asc -o add_custom --npu-arch=dav-2201

2. 使用msprof op调用算子可执行文件进行性能采集。
  1 msprof op ./add_custom

3. 查看性能数据，了解当前算子性能瓶颈。
  1 2 3 4 5 6 7 8 9 10 11 性能数据文件夹结构示例： ├──dump # 原始的性能数据，用户无需关注 ├──ArithmeticUtilization.csv # cube/vector指令cycle占比，建议优化算子逻辑，减少冗余计算指令 ├──L2Cache.csv # L2 Cache命中率，影响MTE2，建议合理规划数据搬运逻辑，增加命中率 ├──Memory.csv # UB，L1和主存储器读写带宽速率，单位GB/s ├──MemoryL0.csv # L0A，L0B，和L0C读写带宽速率，单位GB/s ├──MemoryUB.csv # Vector和Scalar到UB的读写带宽速率，单位GB/s ├──OpBasicInfo.csv # 算子基础信息 ├──PipeUtilization.csv # pipe类指令耗时和占比，建议优化数据搬运逻辑，提高带宽利用率 ├──ResourceConflictRatio.csv # UB上的bank group、bank conflict和资源冲突率在所有指令中的占比， 建议减少/避免对于同一个bank读写冲突或bank group的读读冲突 └──visualize_data.bin # MindStudio Insight呈现文件


对于SIMT编程场景，只需遵循AI Core SIMT编译指导进行算子编译，生成可执行文件后，按照上述步骤2和步骤3使用msprof工具执行程序，以获取算子执行的性能数据。


#### NPU域性能仿真

在非昇腾设备上，通过毕昇编译器仿真编译后生成可执行程序，可以通过msprof op simulator完成性能流水仿真。当前仅支持SIMD编程场景，SIMT编程场景不支持。


- 通过CMake方式仿真编译算子

  - 灵活控制不同的target是否开启仿真编译。修改CMakeList，使用target_link_libraries与target_link_directories手动配置链接库与路径：

```
find_package(ASC REQUIRED)
project(kernel_samples LANGUAGES ASC CXX)
add_executable(demo
add_custom.asc
)
set_target_properties(demo PROPERTIES
LINK_FLAGS "-Wl,--disable-new-dtags"  ## 由于仿真库会依赖当前目录的其他非链接的so，需要开启RPATH传递依赖目录
)
target_link_libraries(demo PRIVATE
runtime_camodel npu_drv_camodel  ## 仿真编译需要链接的so
m
)
# ${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例，安装后文件默认存储路径为：/usr/local/Ascend/cann。
target_link_directories(demo PRIVATE
${INSTALL_DIR}/tools/simulator/dav_2201/lib  ##仿真库所在的目录，其中dav_2201目录名称与芯片版本相关
)
target_compile_options(demo PRIVATE
$<$<COMPILE_LANGUAGE:ASC>: --npu-arch=dav-2201>
)
```


    其中仿真库所在目录与NPU架构版本号之间的关系如下，目录名使用下划线连接“dav”和架构版本号。 表1 simulator目录名称与npu-arch关系 npu-arch simulator目录名称 dav-2002 dav_2002 dav-2201 dav_2201 dav-3510 dav_3510

    其中仿真编译所依赖的库介绍如下，开启仿真编译时，需要优先链接，确保优先使用仿真库的符号，防止出现运行时coredump等异常情况。

**表2 仿真编译依赖库介绍**

| 名称 | 作用描述 |
| --- | --- |
| libruntime\_camodel.so | camodel仿真运行时库，负责NPU算子仿真环境的运行时功能支持。 |
| libnpu\_drv\_camodel.so | 仿真驱动库，对真实的驱动接口打桩，模拟真实NPU驱动行为，提供硬件交付的接口仿真。 |


  - 通过向CMake传入变量CMAKE_ASC_RUN_MODE和CMAKE_ASC_ARCHITECTURES来统一开启仿真编译。命令示例如下：
    sim表示开启仿真编译，dav-后为NPU架构版本号，请根据实际情况进行填写。

```
cmake -B build -DCMAKE_ASC_RUN_MODE=sim -DCMAKE_ASC_ARCHITECTURES=dav-2201
```


    使用命令行往CMake传入变量的方式全局生效，会对CMakeList中所有的target开启sim模式。

- 通过命令行方式仿真编译算子可执行程序

```
# ${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例，安装后文件默认存储路径为：/usr/local/Ascend/cann。
# 设置simulator目录名称
export SIMULATOR_FOLDER=dav_2201
# 编译算子object: bisheng -c [算子源文件] -o [输出产物名称] --npu-arch=[NPU架构版本号]，--run-mode=sim
bisheng -c add_custom.asc -o add_custom.asc.o --npu-arch=dav-2201 --run-mode=sim
# 将add算子object转为可执行程序
bisheng -Wl,--disable-new-dtags -L${INSTALL_DIR}/tools/simulator/${SIMULATOR_FOLDER}/lib -Wl,-rpath,${INSTALL_DIR}/tools/simulator/${SIMULATOR_FOLDER}/lib -lruntime_camodel -lnpu_drv_camodel -lm -lstdc++ -lascendcl -lascendc_runtime -lprofapi -lunified_dlog -lmmpa -lascend_dump -lc_sec -lerror_manager -lnpu_drv add_custom.asc.o -o add_custom
```


  编译时除了需要连接仿真库libruntime_camodel.so和libnpu_drv.so，还需要链接libascendc_runtime.a、libruntime.so、libprofapi.so、libunified_dlog.so、libmmpa.so、libascend_dump.so、libc_sec.so、liberror_manager.so、libascendcl.so（具体说明参考表2）和第三方库libstdc++.so、libm.so。


- 性能流水仿真
  使用msprof op simulator并获取仿真数据。

```
msprof op simulator ./add_custom
```


  仿真数据说明

```
├──dump                    # 原始的性能数据，用户无需关注
└──simulator               # 算子基础信息
├──core0.cubecore0
├──...
├──core23.cubecore0
├──trace.json           # Edge/Chrome Trace Viewer/Perfetto呈现文件
└──visualize_data.bin   # MindStudio Insight呈现文件
```
