msOpProf模式用户指南
简介
MindStudio Ops Profiler(算子调优工具,msOpProf)用于采集和分析运行在AI处理器上算子的关键性能指标,用户可根据输出的性能数据,快速定位算子的软、硬件性能瓶颈,提升算子性能的分析效率。
当前支持基于上板(msOpProf)或仿真(msOpProf simulator)运行模式和不同文件形式(可执行文件或算子二进制**.o**文件)进行性能数据的采集和自动解析。
本文档介绍msOpProf运行模式的使用方法。
功能特性
通过MindStudio Insight展示计算内存热力图、Roofline瓶颈分析图、Cache热力图、通算流水图(通算融合算子)、Pipe流水图、算子代码热点图以及性能数据文件等单算子调优能力,具体请参考表 1 msOpProf模式功能特性。
| 功能 | 链接 |
|---|---|
| 计算内存热力图 | 计算内存热力图 |
| Roofline瓶颈分析图 | Roofline瓶颈分析图 |
| Cache热力图 | Cache热力图 |
| 通算流水图 | 通算流水图 |
| Pipe流水图 | Pipe流水图 |
| 算子代码热点图 | 算子代码热点图 |
| 性能数据文件 | 性能数据文件 |
调用场景
| 调用场景 | 参考章节 |
|---|---|
| Kernel直调场景 | Kernel直调场景 |
| 单算子API调用场景 | 单算子API调用场景 |
| PyTorch 框架接入算子 | PyTorch框架算子调用场景 |
| Triton-Ascend 算子 | Triton算子调用场景 |
| catlass算子 | catlass算子调用场景 |
| MC2算子调用场景 | MC2算子调用场景 |
使用前准备
环境准备
-
请参考MindStudio Ops Profiler安装指南,完成相关环境变量的配置。
-
若要使用MindStudio Insight进行查看时,需要单独安装MindStudio Insight软件包,具体下载链接请参见MindStudio Insight安装指南。
使用约束
- 性能数据采集时间建议在5min以内,同时推荐用户设置的内存大小在20G以上(例如容器配置:docker run --memory=20g 容器名)。
- 请确保性能数据保存在不含软链接的当前用户目录下,否则可能引起安全问题。
注意事项
- msOpProf工具的使用依赖CANN包中的msOpProf可执行文件,该文件中的接口使用和msOpProf一致,该文件为CANN包自带,无需单独安装。
- 通过键盘输入“CTRL+C”后,算子执行将会被停止,工具会根据当前已有信息生成性能数据文件。若不需要生成该文件,可再次键盘输入“CTRL+C”指令。
- 若未指定--output参数,需确保其他用户不具备当前路径的上一级目录的写入权限。
- 使用msOpProf之前,用户需保证app功能正常。
- 不支持在同一个Device侧同时拉起多个性能采集任务。
- 用户需自行保证可执行文件或用户程序(application)执行的安全性。
- 建议限制对可执行文件或用户程序(application)的操作权限,避免提权风险。
- 不建议进行高危操作(删除文件、删除目录、修改密码及提权命令等),避免安全风险。
命令参考
登录运行环境,使用msprof op 可选参数 app [arguments]格式调用,可选参数的具体情况请参考表 1 msOpProf可选参数表。具体命令示例如下:
msprof op --output=$HOME/projects/output $HOME/projects/MyApp/out/main blockdim 1 # --output为可选参数,$HOME/projects/MyApp/out/main为使用的app,blockdim 1为用户app的可选参数
| 可选参数 | 描述 | 是否必选 |
|---|---|---|
| --application | 建议使用msprof op [msOpProf 参数] ./app进行拉取,其中app为指定的可执行文件,如果app未指定路径,默认为使用当前路径。 使用./app时,需将msOpProf的相关参数添加到./app前,以确保相关功能生效。 当前与./app [arguments]兼容,后期将修改为./app [arguments]。 |
是,指定的可执行文件和--config二选一 |
| --config | 配置为输入算子编译得到的二进制文件*.o,可配置为绝对路径或者相对路径。具体可参考json配置文件说明。 进行算子调优之前,可通过以下两种方式获取算子二进制*.o文件。需确保群组和其他组的用户不具备--config指定的json文件及上一级目录的写入权限。同时,需要确保json文件的上一级目录属主为当前用户。 |
是,指定的可执行文件和--config二选一 |
| --kernel-name | 指定要采集的算子名称,支持使用算子名前缀进行模糊匹配。如果不指定,则只对程序运行过程中调度的第一个算子进行采集。 注意事项: |
否 |
| --launch-count | 设置可以采集算子的最大数量,默认值为1,取值范围为1~5000之间的整数。 | 否 |
| --launch-skip-before-match | 用于设置不需要采集数据的算子数量,从第一个算子开始到指定数目的算子不进行采集,仅对指定数目之后的算子开始采集。 注意事项:
|
否 |
| --aic-metrics | 使能算子性能指标的采集能力和算子采集能力指标。
|
否 |
| --kill | 选项包括开启(on)和关闭(off),默认情况下设置为关闭(off),关闭该功能。 若用户配置--kill=on使能该功能,用户程序将会在采集完--launch-count设置的算子数量后,自动停止程序。 注意事项:
|
否 |
| --mstx | 该参数决定算子调优工具是否使能用户代码程序中使用的mstx API。 默认为off,表示关闭对mstx API的使能。 若用户配置--mstx=on,算子调优工具将会使能用户代码程序中使用的mstx API。具体举例如下: msprof op --mstx=on ./add_custom注意事项:
|
否 |
| --mstx-include | 该参数支持在算子调优工具使能mstx API的情况下,仅使能用户指定mstx API。 若不配置,则默认使能所有用户代码中使用的mstx API。 若配置,--mstx-include只使能用户指定的mstx API。--mstx-include的输入为用户调用mstx函数时传入的message字符串,使用"|"拼接多个字符串。具体举例如下: --mstx=on --mstx-include="hello|hi" //仅使能用户传入mstx函数中message参数为hello和hi的mstx API注意事项:
|
否 |
| --replay-mode | 算子数据采集的重放模式,可配置为kernel/application/range,默认为kernel。
|
否 |
| --warm-up | 当部分算子使用msOpProf采集时,会达不到芯片提频的最小任务耗时产生降频,从而会对交付件的结果产生一定影响。在该情况下,可用--warm-up指定预热次数,提前提升AI处理器的运行频率,使上板数据更准确。注意事项:
|
否 |
| --output | 收集到的性能数据的存放路径,默认在当前目录下保存性能数据。 需确保群组和其他组的用户不具备--output指定输出路径的上一级目录的写入权限。同时,需要确保--output指定目录的上一级目录属主为当前用户。 |
否 |
| --dump | 控制仿真器dump文件是否生成。 选项包括开启(on)和关闭(off),默认情况下设置为关闭(off),即不生成仿真器dump文件。 注意事项:
|
否 |
| --core-id | 该参数适用于算子分布均匀的情况时,可使用--core-id参数指定部分逻辑核的id,解析部分核的仿真数据。 核id的取值范围为[0,49]。 注意事项: |
否 |
| -h,--help | 输出帮助信息。 | 否 |
工具使用
msOpProf工具协助用户定位算子内存、算子代码以及算子指令的异常,实现全方位的算子调优。使用方式的详细说明请参考表 1 msOpProf模式功能说明表。
| 适用场景 | 使用方式 | 展示的图形 |
|---|---|---|
| 适用于实际运行环境中的性能分析,可协助用户定位算子内存和性能瓶颈。 | 直接分析运行中的算子,无需额外配置,适合在板环境中快速定位算子性能问题。 | 计算内存热力图 Roofline瓶颈分析图 Cache热力图 通算流水图 Pipe流水图 算子代码热点图 |
msOpProf分段调优原则
-
使用--launch-skip-before-match命令筛选算子调优范围,筛选原则如下:
- 若已配置--launch-skip-before-match,从第一个算子开始到指定数目的算子不进行采集,仅对指定数目之后的算子开始采集。
- 若未配置,不进行筛选。
-
在1的基础上,使用--mstx命令筛选算子调优范围,筛选原则如下:
- 若已配置--mstx,只采集mstxRangeStartA和mstxRangeEnd接口使能范围内的算子。
- 若未配置,不进行筛选。
-
在2的基础上,使用--kernel-name命令筛选算子调优范围,筛选原则如下:
- 若已配置--kernel-name,只采集--kernel-name范围内的算子。
- 若未配置--kernel-name,则只对程序运行过程中调度的第一个算子进行采集。
-
在3的基础上,使用--aic-metrics命令筛选算子调优数据的采集项,筛选原则如下:
- 若已配置--aic-metrics,选择算子性能指标的采集项。
- 若未配置--aic-metrics,默认采集Default部分的算子性能指标,KernelScale、TimelineDetail、Roofline、Occupancy部分的算子性能指标将无法采集。
-
使能--kill=on功能的情况下,将实际调优的算子数量与--launch-count值进行对比,从而决定是否需要自动停止程序。
若实际已调优算子数量小于等于--launch-count值,则继续执行。否则,实际已调优算子数量达到--launch-count设置的算子数值时,会自动停止程序。
msOpProf配置
若要实现Cache热力图跳转功能,需要执行以下操作:
- 在编译算子时添加
-g编译选项,具体操作请参见编译选项需添加-g。 - --aic-metrics参数使能Source选项。
启动工具
Note
当前msOpProf不支持-O0编译选项。
-
登录运行环境,使用
msprof op 可选参数 app [arguments]格式开启算子上板调优,可选参数的具体情况请参考命令参考。具体命令示例如下:msprof op --output=$HOME/projects/output $HOME/projects/MyApp/out/main # --output为可选参数 $HOME/projects/MyApp/out/main为使用的app -
通过以下两种方式执行算子调优:
-
基于可执行文件
-
单算子场景,以test为例。
Note
示例中的可执行文件名称
test仅作为示例展示,实际名称请以当前工程中编译生成的可执行文件为准。示例一:
msprof op ./test示例二:
msprof op --aic-metrics=<select_metrics> --output=./output_data ./test -
多算子场景。
若test中有Add,MatlMul,Sub算子,可配合--launch-count和--kernel-name使用,可以指定采集Add和Sub算子。
msprof op --launch-count=10 --kernel-name="Add|Sub" --output=./output_data ./test # ./test为用户二进制文件,需放置在命令末尾
-
-
基于输入算子二进制文件*.o的配置文件.json,具体请参见json配置文件说明。
msprof op --config=./add_test.json --aic-metrics=<select_metrics> --output=./output_data
-
-
命令完成后,会在默认路径或指定的“--output”目录下生成以“OPPROF_{timestamp}_XXX”命名的文件夹,在“--aic-metrics”全部开启时,结构示例如下:
-
采集多卡多算子的场景。
Note
对多卡并行的通算融合算子(MC2或LCCL算子)进行调优时,结果目录下会存在若干以Device ID为名的子目录,这取决于定义时指定的NPU数量,每个NPU的调优结果会分别存放在对应的Device ID目录下。
└──OPPROF_{timestamp}_XXX ├── device0 // 运行时使用AI处理器的ID └── device1 ├── OpName0 // OpName0为采集算子名称 │ ├── 0 // 表示算子调度顺序 │ │ ├──dump // 与单算子含义一致,存放过程件的文件夹 │ │ └──xxx_yyy.csv // xxx代表该算子生成的指标种类名,例如L2Cache,具体指标种类可参考[表2](#zh-cn_topic_0000002144027017_table056510168348)中的csv文件介绍,yyy为csv文件的时序后缀,例如L2Cache_20240603022812284.csv │ │ └──visualize_data.bin ├── OpName1 │ ├── 0 │ │ ├──dump │ │ └──xxx_yyy.csv │ │ └──visualize_data.bin ├── OpName2 │ ├── 0 │ │ ├── dump │ │ └── xxx_yyy.csv │ │ └──visualize_data.bin │ │ └── trace.json // 此文件仅适用于MC2和LCCL类型通算融合算子 -
采集单卡多算子场景。
└──OPPROF_{timestamp}_XXX ├── OpName0 // OpName0为采集算子名称 │ ├── 0 // 表示算子调度顺序 │ │ ├── dump // 与单算子含义一致,存放过程件的文件夹 │ │ └── xxx_yyy.csv // xxx代表该算子生成的指标种类名,例如L2Cache,具体指标种类可参考[表2](#zh-cn_topic_0000002144027017_table056510168348)中的csv文件介绍,yyy为csv文件的时序后缀,例如L2Cache_20240603022812284.csv │ │ └──visualize_data.bin │ ├── 1 │ │ ├──dump │ │ └──xxx_yyy.csv │ │ └──visualize_data.bin ├── OpName1 │ ├── 0 │ │ ├── dump │ │ └── xxx_yyy.csv │ │ └── visualize_data.bin -
采集单卡单算子场景。
OPPROF_{timestamp}_XXX ├── dump ├── ArithmeticUtilization.csv ├── L2Cache.csv ├── Memory.csv ├── MemoryL0.csv ├── MemoryUB.csv ├── OpBasicInfo.csv ├── PipeUtilization.csv ├── ResourceConflictRatio.csv ├── visualize_data.bin
表 2 msOpProf模式文件介绍
名称 说明 dump文件夹 原始的性能数据,用户无需关注。 ArithmeticUtilization.csv Cube和Vector类型的指令耗时和占比,可参考ArithmeticUtilization(Cube及Vector类型指令耗时和占比)。 L2Cache.csv L2 Cache命中率,可参考L2Cache(L2 Cache命中率). Memory.csv UB/L1/L2/主存储器采集内存读写带宽速率,可参考Memory(内存读写带宽速率)。 MemoryL0.csv L0A/L0B/L0C采集内存读写带宽速率,可参考MemoryL0(L0读写带宽速率)。 MemoryUB.csv mte/vector/scalar采集ub读写带宽速率,可参考MemoryUB(UB读写带宽速率)。 PipeUtilization.csv 采集计算单元和搬运单元耗时和占比,可参考PipeUtilization(计算单元和搬运单元耗时占比)。 ResourceConflictRatio.csv UB上的bank group、bank conflict和资源冲突在所有指令中的占比,可参考ResourceConflictRatio(资源冲突占比)。 OpBasicInfo.csv 算子基础信息,包含算子名称、block dim和耗时等信息,可参考OpBasicInfo(算子基础信息)。 visualize_data.bin 算子基础信息、计算单元负载、热点函数和Roofline瓶颈分析等信息的可视化呈现文件。 trace.json 通算流水可视化呈现文件。 Note
- visualize_data.bin可通过MindStudio Insight工具进行可视化展示,具体使用方法请参考MindStudio Insight算子调优。
- msOpProf的热点函数功能仅支持Atlas A2 训练系列产品/Atlas A2 推理系列产品。
- 当前,仅支持生成MC2和LCCL类型通算融合算子的通算流水图。
- MC2和LCCL类型通算融合算子不支持生成Cache热力图和算子代码热点图,且不支持Atlas 推理系列产品。
- 单位GB/s表示每秒传输1GB的数据量。
-
-
将visualize_data.bin文件导入MindStudio Insight后,将会展示计算内存热力图、Roofline瓶颈分析图、Cache热力图、通算流水图和算子代码热点图。
-
将trace.json文件导入Chrome浏览器或MindStudio Insight后,将会展示通算流水图。
计算内存热力图
功能说明
通过msOpProf运行模式生成的visualize_data.bin文件可通过MindStudio Insight进行可视化呈现,界面将会以资源维度展示算子基础信息、计算负载分析和内存负载分析的数据,协助开发者以全局视角识别资源瓶颈。
MindStudio Insight具体操作请参考《MindStudio Insight算子调优》的“详情(Details)”章节。
使用说明
visualize_data.bin文件通过MindStudio Insight工具展示的界面如下。
图 1 详情界面1

-
提供核间负载分析图(Core Occupancy),以数据窗格的方式呈现各物理单核的耗时、总数据吞吐量及Cache命中率,帮助开发人员提升物理核的使用效率。
Note
- 仅Atlas A3 训练系列产品/Atlas A3 推理系列产品和Atlas A2 训练系列产品/Atlas A2 推理系列产品以及Atlas 350 加速卡支持该功能。
- 具体展示的核数与实际使用的硬件有关。
-
Roofline瓶颈分析图(Roofline),具体介绍请参见Roofline瓶颈分析图。
-
提供计算负载分析(Compute Workload Analysis),以柱状图和数据表格的方式呈现计算负载数据,帮助开发人员分析Cube/Vector计算资源是否得到了充分利用。
-
提供内存负载分析(Memory Workload Analysis),支持展示MTE各通路的活跃带宽值(未开启MemoryDetail不显示Cube上的MTE1和MTE2通路的活跃带宽)。通过内存热力图和数据窗格,直观呈现各通路的请求数、搬运带宽与利用率。帮助开发人员分析可能存在瓶颈的通路。
Note
- 数据窗格呈现的内容会随算子类型而变化。
- 活跃带宽值的功能不适用于Atlas 推理系列产品。
- Atlas A3 训练系列产品/Atlas A3 推理系列产品暂不支持峰值(最大带宽占比)展示。
- Atlas 350 加速卡包含SIMD架构算子暂不支持UB读写VEC单元的数据展示。
Roofline瓶颈分析图
功能说明
通过msOpProf运行模式生成的visualize_data.bin文件可通过MindStudio Insight进行可视化呈现,Roofline瓶颈分析图可构建出处理器的性能模型,然后利用该性能模型快速评估出算子的理论性能极限,协助开发者快速识别瓶颈类型。
MindStudio Insight具体操作请参考《MindStudio Insight算子调优》的“详情(Details)”章节。
使用说明
界面介绍
生成的visualize_data.bin文件可导入MindStudio Insight进行可视化呈现,并针对不同的硬件以及算子类型会生成不同的Roofline分析视图。
-
Atlas 推理系列产品的Roofline瓶颈分析图中仅有内存单元视图。
图 1 Atlas 推理系列产品 Roofline瓶颈分析图

-
Atlas A3 训练系列产品/Atlas A3 推理系列产品和Atlas A2 训练系列产品/Atlas A2 推理系列产品根据算子类型不同而产生不同的视图,具体请参见表 1 Atlas A3 训练系列产品/Atlas A3 推理系列产品和Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Roofline视图情况列表。
图 2 Atlas A3 训练系列产品/Atlas A3 推理系列产品和Atlas A2 训练系列产品/Atlas A2 推理系列产品 Roofline瓶颈分析图

表 1 Atlas A3 训练系列产品/Atlas A3 推理系列产品和Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Roofline视图情况列表
Roofline视图类型
Vector算子
Cube算子
Mix算子
GM/L2视图
√
√
√
Vector内存单元视图
√
-
√
Vector内存通路视图
√
-
√
Vector Pipeline视图
√
-
√
Cube内存单元视图
-
√
√
Cube内存通路视图
-
√
√
Cube Pipeline视图
-
√
√
-
Atlas 350 加速卡根据算子类型不同而产生不同的视图,具体请参见表 2 Atlas 350 加速卡支持Roofline视图情况列表。
图 3 Atlas 350 加速卡Roofline瓶颈分析图

表 2 Atlas 350 加速卡支持Roofline视图情况列表
Roofline视图类型
Vector算子
Cube算子
Mix算子
GM/L2视图
√
√
√
Vector内存单元视图
√
-
√
Cube内存单元视图
-
√
√
Cube内存通路视图
-
√
√
Cube Pipeline视图
-
√
√
Note
Atlas 350 加速卡的Vector内存单元视图仅支持SIMT视图,暂不支持SIMD视图。
使用说明
每个单元/通路的Roofline性能分析结果由横轴、纵轴、屋顶线、带宽斜线和实际运行坐标点组成,具体请参见图 4 Roofline示意图。
-
横轴:代表算术强度(Arithmetic Intensity),即某一单元或通路中总的浮点运算次数与总的访存数据量之比,单位为Ops/Byte。
-
纵轴:表示计算性能(Performance),即每秒可执行的浮点操作数,单位为TOps/s。
-
屋顶线:指图中顶部的水平线,代表NPU的理论最大计算性能。无论算术强度如何提高,应用的实际性能都不可能超过硬件上限。
-
带宽斜线:指图中与屋顶线相交的斜线,其与纵轴的交点取决于理论最大带宽。当理论最大带宽乘以算术强度小于NPU理论最大计算性能时,能达到的最大算力随算术强度的增加而线性增长。
Note
屋顶线和带宽斜线组合成算子能达到的理论最大算力,可以概括为min(NPU理论最大计算性能,理论最大带宽*实际算术强度)。
-
实际运行坐标点的参数构成请参见表 3 实际运行坐标点说明。
坐标参数 说明 带宽(Bandwidth) 该单元/通路的理论最大带宽。 算术强度(Arithmetic Intensity) 算子实际运行时的算术强度,即横轴坐标值。 性能(Performance) 算子实际运行时的计算性能,即纵轴坐标值。 性能百分比(Performance Ratio) 算子实际运行时的计算性能与当前数据量下的理论最大计算性能比值,即图中a/b的百分比。
Roofline分析视图分析算子的性能百分比,并提供以下客观分析结果:
-
算子性能百分比大于80%时,按照所在区域进行提示,有以下两种情况。
- Compute Bound:计算瓶颈。
- Memory Bound:内存瓶颈。
-
算子性能百分比小于80%,Bound类型为Latency Bound,有以下三种情况:
- 若最大的pipeline ratio小于80%,提示latency bound:pipeline caused。
- 若最大的pipeline ratio大于80%,需识别最大pipeline ratio的类型。
-
若最大pipeline ratio的类型是compute pipeline (cube ratio、vector ratio、scalar ratio),提示latency bound:compute caused。
Note
Atlas 350 加速卡只支持cube ratio、scalar ratio类型。
-
若最大pipeline ratio的类型是memory pipeline(MTE1 ratio、MTE2 ratio、MTE3 ratio),提示latency bound:memory caused。
-
Cache热力图
功能说明
针对用户程序Kernel函数内的L2 Cache访问情况,msOpProf工具可以记录并通过MindStudio Insight工具进行可视化呈现Cache热力图,该热力图可显示对应指令信息,以便用户优化L2Cache命中率,从而优化算子程序。
注意事项
- MindStudio Insight具体操作和详细字段解释请参考《MindStudio Insight算子调优》的“缓存(Cache)”章节。
- 添加
-g编译选项会在生成的二进制文件中附带调试信息,建议限制带有调试信息的用户程序的访问权限,确保只有授权人员可以访问该二进制文件。 - 若不使用
llvm-symbolizer组件提供的相关功能,输入msOpProf的程序编译时不包含-g即可,msOpProf工具则不会调用llvm-symbolizer组件的相关功能。 - Cache热力图功能不适用于Atlas 推理系列产品。
- MC2算子和LCCL算子均不支持生成Cache热力图。
使用说明
Cache热力图界面显示如下。
图 1 Cache热力图

-
Hit展示Cacheline的命中情况,Miss展示Cacheline未命中情况,以便用户分析L2Cache的使用情况,
-
在缓存(Cache)界面,选择命中和未命中事件图,单击放大,在放大的事件图中右键单击所选内存单元格,选择“显示指令”,可跳转至源码(Source)界面,并高亮显示相关指令行。
图 2 Cacheline对应的算子代码热点图

Note
若要使用Cache热力图跳转至算子代码热点图功能,需参考msOpProf配置,提前进行配置。
通算流水图
功能说明
通过msOpProf运行模式对通算融合算子进行调优后,生成的trace.json和visualize_data.bin文件可通过MindStudio Insight进行可视化呈现,能够直观看到通算运行情况、指令耗时等信息,协助开发者识别通算瓶颈。支持通过AscendC API进行性能打点,采集代码在算子block上的实际耗时情况,用于通算算子性能的分析和优化。当前仅支持MC2和LCCL类型的通算融合算子以及ASC通算算子。
注意事项
- MindStudio Insight具体操作和详细字段解释请参考《MindStudio Insight算子调优》的“时间线(Timeline)”章节。
- 添加
-g编译选项会在生成的二进制文件中附带调试信息,建议限制带有调试信息的用户程序的访问权限,确保只有授权人员可以访问该二进制文件。 - 上板流水图功能在KFC场景中使用时,需要注意遵循相关接口使用规则,部分场景下Cube侧的数据无法呈现,需要结合KFC相关接口原理查看算子打点数据。
使用说明
trace.json文件可分别通过Chrome浏览器和MindStudio Insight展示,visualize_data.bin文件仅可通过MindStudio Insight展示。通过AscendC API进行性能打点具体用法请参照《Ascend C算子开发接口》中的“调试接口>上板打印>PrintTimeStamp”章节。
-
Chrome浏览器
在Chrome浏览器中输入“chrome://tracing”地址,并将生成的通算流水图文件(trace.json)拖到空白处打开,键盘上输入快捷键(W:放大,S:缩小,A:左移,D:右移)可进行查看。关键字段说明如表 1 关键字段说明。
字段名 字段功能 MC2算子 LCCL算子 ASC通算算子 AI CORE 算子在AI CORE上的整体运行情况。 支持 支持 不支持 AI CPU 算子在AI CPU上的整体运行情况。 支持 不支持 不支持 TURN 算子在AI CPU上不同通信轮次的流水。 支持 不支持 不支持 AIC BLOCK 算子在AI CORE各Cube核上的整体运行情况和关键接口调用情况。 支持 支持 支持 AIV BLOCK 算子在AI CORE各Vector核上的整体运行情况和关键接口调用情况。 支持 支持 支持 HCCL 通过HCCL通信的算子在多卡间的集合通信流水。 支持 不支持 不支持 HCCL TASK 通过HCCL通信的算子在多卡间的集合通信任务执行流水。 支持 不支持 不支持 AscendC API 展示用户通过AscendC API在每个block上的运行耗时情况 支持 不支持 支持 -
MindStudio Insight
将生成的trace.json文件或visualize_data.bin文件可导入MindStudio Insight进行可视化呈现。
图 1 通算流水图

-
展示算子在AI CPU和AI CORE的耗时掩盖情况,用于评估通算融合算子的性能。
-
展示算子在AI CPU上的不同通信轮次的流水。
-
展示算子在各BLOCK上的运行时间及关键接口调用流水。
-
展示通过HCCL通信的算子在多卡间运行时的集合通信流水及集合通信任务流水。
Note
- MC2算子支持对Atlas A2 训练系列产品/Atlas A2 推理系列产品的AllReduce、AllGather、ReduceScatter、AlltoAll等接口及Atlas A3 训练系列产品/Atlas A3 推理系列产品的AllGather、ReduceScatter、AlltoAllV等接口进行调用,具体介绍请参见《Ascend C算子开发接口》中的“高阶API > Hccl > Hccl Kernel侧接口”章节,添加
-g编译选项后,单击具体接口将会关联代码行调用栈。 - MC2算子和LCCL算子及普通通算算子的支持情况请参考表 1 关键字段说明。
- MC2算子支持对Atlas A2 训练系列产品/Atlas A2 推理系列产品的AllReduce、AllGather、ReduceScatter、AlltoAll等接口及Atlas A3 训练系列产品/Atlas A3 推理系列产品的AllGather、ReduceScatter、AlltoAllV等接口进行调用,具体介绍请参见《Ascend C算子开发接口》中的“高阶API > Hccl > Hccl Kernel侧接口”章节,添加
图 2 算子运行耗时情况图

通过使用同一个descid的打点API,在算子kernel侧进行两次标识,工具会绘制出这两个标识之间,每个block上该算子的运行耗时情况。
-
Pipe流水图
功能说明
对算子进行调优后,生成的trace.json和visualize_data.bin文件可通过MindStudio Insight进行可视化呈现,能够直观看到算子各个Pipe的运行情况,协助开发者识别算子瓶颈。
MindStudio Insight具体操作和详细字段解释请参考《MindStudio Insight算子调优》的“时间线(Timeline)”章节。
使用说明
- 生成的visualize_data.bin文件可导入MindStudio Insight进行可视化呈现,展示算子在各个AI CORE各单元的活跃情况,界面如下。
- Pipe流水图特性是基于采样实现的,和用户开启的核数没有直接关系。若用户开启全部的核,最终也只会展示6个核的数据。
- 若使用MarkStamp打点时出现打点数据丢失情况,建议降低打点数目和密集程度。
图 1 Pipe流水图

支持用户通过AscendC::MarkStamp接口在算子kernel侧任意代码处进行流水图打点,用以标识流水范围。使用接口在vector打上一个id为13的点,会在图上的scalar单元和vector单元展示MarkStamp13,具体请参见图 2 自定义打点图。
Note
- 在scalar上进行打点,只会产生一条打点数据,既表示下发也表示执行。在其他单元上进行打点,会产生两条数据,一条是scalar上的点,表示打点指令下发,一条是对应单元上的点,表示打点指令执行。
- SIMT函数里不支持打点。
算子代码热点图
功能说明
通过msOpProf运行模式生成的visualize_data.bin文件可通过MindStudio Insight进行可视化呈现。界面支持查看算子源码与指令集的映射关系、耗时情况等功能,可协助开发者识别热点代码分布,并分析热点函数优化的可行性。
注意事项
- MindStudio Insight具体操作和详细字段解释请参考《MindStudio Insight算子调优》的“源码(Source)”章节。
- 添加
-g编译选项会在生成的二进制文件中附带调试信息,建议限制带有调试信息的用户程序的访问权限,确保只有授权人员可以访问该二进制文件。 - 算子程序编译时需要包含-g,否则msOpProf不会展示热点图,也不调用llvm-symbolizer组件的相关功能实现代码与PC映射。
- msOpProf算子代码热点图功能不适用于Atlas 推理系列产品。
- MC2算子和LCCL算子均不支持生成算子代码热点图。
使用说明
算子代码热点图界面如下。
图 1 msOpProf源码界面

-
在界面顶部,可切换计算单元和核函数文件。
-
在左侧界面,提供算子核函数各行代码模拟L2Cache命中率、与GM有关的数据搬运量及对应的指令数,帮助开发者快速定位瓶颈代码行。
-
在右侧界面,提供具体的指令维度模拟L2Cache命中率、与GM有关的数据搬运量、执行次数及与代码相关联,帮助开发者进一步分析代码耗时长的原因。
-
MindStudio Insight时间线和详情页面中L2Cache命中率的差异请参见表 1 MindStudio Insight L2Cache命中率对比表。
表 1 MindStudio Insight L2Cache命中率对比表
页面位置 数据来源 维度 时间线 工具模拟 代码行和指令维度。 详情 真实存在 核维度。 Note
查看与GM有关的数据搬运量(Process Bytes)时,不涉及GM单元的情况都显示为NA。
-
msOpProf具体特性支持情况请参见表 2 msOpProf热点图的功能介绍及表 3 stall具体说明。
列名 Atlas A2 训练系列产品/Atlas A2 推理系列产品 Atlas A3 训练系列产品/Atlas A3 推理系列产品 Atlas 推理系列产品 Atlas 350 加速卡 说明 源码 支持 支持 不支持 支持 - 指令PC地址 支持 支持 不支持 支持 - PIPE 支持 支持 不支持 支持 - 执行次数 支持 支持 不支持 支持 查看算子源码与指令的执行次数。 GPR Count 不支持 不支持 不支持 支持 查看寄存器使用情况。
不支持使用TRACE_START和TRACE_STOP接口查看部分算子的寄存器使用情况。GPR Status 不支持 不支持 不支持 支持 查看寄存器使用状态。
当前寄存器共有五种状态:Space=0(不显示在可视化工具中)、Read=1(右空心箭头)、Write=2(左实心箭头)、ReadAndWrite=3(左实心箭头与右空心箭头)、InUsed=4(竖线)。L2Cache命中率 支持 支持 不支持 不支持 模拟代码行和指令维度。 Process Bytes 支持 支持 不支持 支持 查看与GM有关的数据搬运量。 Stall Sampling(All Samples) 不支持 不支持 不支持 支持 指令在执行过程中,由于资源冲突、数据依赖等原因而产生的等待次数,包含active。 Stall Sampling(Not Issue) 不支持 不支持 不支持 支持 指令在执行过程中,由于资源冲突、数据依赖等原因而产生的等待次数,不包含active。 名称 说明 Stall_Cycles(nop阻塞) 指因nop指令而产生的阻塞。 Stall_Divergence_Stack_Spill(Divergence栈溢出阻塞) 指在执行分支指令时,由于栈空间不足或分支路径导致的预测与实际执行路径不一致,从而引发的流水线阻塞周期。 Stall_IBuf_Empty(IBuf空阻塞) 指IBuf为空时,因无法获取下一条指令而导致的流水线阻塞周期。 Stall_Others(其他阻塞) 指除已明确分类的阻塞原因外,由其他异常或控制逻辑触发的流水线暂停周期。 Stall_Register_bank_conflict(寄存器冲突阻塞) 指由于指令访问同一组寄存器时发生冲突,导致流水线暂停以避免数据错误的阻塞周期。 Stall_Resource_conflict(资源冲突阻塞) 指由于多个指令同时竞争同一硬件资源而无法并行执行,导致流水线暂停的阻塞周期。 Stall_Scoreboard_Not_Ready(ScoreBoard未准备阻塞) 指由于ScoreBoard状态尚未就绪(如前序指令仍在占用相关资源或寄存器),当前指令无法继续执行而导致的流水线阻塞。 Stall_Warp_Level_Sync(Warp Level同步阻塞) 指在多线程执行中,为确保同Warp内线程的同步与一致性,在未满足同步条件时对指令执行进行的阻塞。 active 无阻塞成功发射指令的次数。

