性能调优

性能采集与分析工具

通过毕昇编译器编译生成可执行程序后,使用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)

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                 # UBL1和主存储器读写带宽速率单位GB/s
    ├──MemoryL0.csv               # L0AL0B和L0C读写带宽速率单位GB/s
    ├──MemoryUB.csv               # Vector和Scalar到UB的读写带宽速率单位GB/s
    ├──OpBasicInfo.csv            # 算子基础信息
    ├──PipeUtilization.csv        # pipe类指令耗时和占比建议优化数据搬运逻辑提高带宽利用率
    ├──ResourceConflictRatio.csv  # UB上的bank groupbank conflict和资源冲突率在所有指令中的占比 建议减少/避免对于同一个bank读写冲突或bank group的读读冲突
    └──visualize_data.bin         # MindStudio Insight呈现文件
    

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

NPU域性能仿真

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