Back to skills
SKILL.md
Msot Msopprof Operator Profiler
ASecurity当用户希望使用 msOpProf(`msprof op` / `msprof op simulator`)对昇腾 AI 算子做上板或仿真性能调优、解释 `aic-metrics`/`trace.json`/`visualize_data.bin`、选择 device vs simulator 路径、排查 `--soc-version`/`--export`/`signal 6`/`Bad address`/热点图或流水图相关问题,或要求生成固定分析报告模板(算子基本信息 / 关键数据 TOP5 / 核心瓶颈 TOP5 / 优化建议 TOP5)时,使用本技能。它负责先判定模式、输入形态与芯片/能力边界,再给出正确命令、结果解读、固定报告输出与高频踩坑规避;不要把经验案例当成通用规则。
- 32 stars
- 0 votes
- 0 copies
- 6 views
- Added September 23, 2026
Works with
Security analysis
100/100Pro scans all 4 files and shows the line behind each finding
npx -y skills add kali20gakki/msAgent --skill msot-msopprof-operator-profiler --agent claude-codeAre you the author of Msot Msopprof Operator Profiler?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/kali20gakki-msot-msopprof-operator-profiler)---
name: msot-msopprof-operator-profiler
description: 当用户希望使用 msOpProf(`msprof op` / `msprof op simulator`)对昇腾 AI 算子做上板或仿真性能调优、解释 `aic-metrics`/`trace.json`/`visualize_data.bin`、选择 device vs simulator 路径、排查 `--soc-version`/`--export`/`signal 6`/`Bad address`/热点图或流水图相关问题,或要求生成固定分析报告模板(算子基本信息 / 关键数据 TOP5 / 核心瓶颈 TOP5 / 优化建议 TOP5)时,使用本技能。它负责先判定模式、输入形态与芯片/能力边界,再给出正确命令、结果解读、固定报告输出与高频踩坑规避;不要把经验案例当成通用规则。
---
# msOpProf 算子性能调优
使用本技能时,咨询和执行任务都必须先完成资料查询:在代码仓 https://gitcode.com/Ascend/msopprof 查询 msopprof 与 msopprof simulator 使用资料。下文及 references 中的参数、能力边界和命令模板按返回的相关正文核验后使用;查询失败时查找本地相关工具或本地资料参考用法回答和命令执行。
## 何时必须使用本技能
当用户问题包含以下任一类需求时,应优先使用本技能:
- 明确提到 `msprof op`、`msprof op simulator`、`msOpProf`
- 询问如何做 **算子性能调优 / 上板调优 / 仿真调优**
- 询问如何查看或解释:
- `visualize_data.bin`
- `trace.json`
- `OpBasicInfo.csv`
- `PipeUtilization.csv`
- `MemoryDetail`
- `Roofline`
- `PMSampling`
- 询问如何在 **device vs simulator** 之间选择
- 询问 `application` / `config` / `export` 三种输入形态的差别
- 询问如何生成 **固定报告 / 模板化结论 / Top 5 总结**
- 遇到以下高频故障:
- `signal 6`
- `Bad address`
- `--soc-version` 不生效
- `--kernel-name` 不生效
- `--export` 目录如何组织
- `TimelineDetail` / `PMSampling` / `--core-id` 为什么行为不符合预期
## 不要在这些场景误用本技能
- 用户只是在问通用 CANN 安装,而不是 msOpProf 本身
- 用户只想修一个普通编译错误,且问题与 msOpProf 调优流程无关
- 用户只是要翻译某段文档,而不是要执行或理解调优流程
- 用户要分析的是其他 profiling 工具(如纯 DB 分析、整机 profiler、非 msOpProf 产物)
## 技能目标
帮助算子开发者在 **上板(device)** 或 **仿真(simulator)** 模式下:
1. 选对运行模式和输入形态(`application` / `config` / `export`)。
2. 生成最小可用且可解释的性能数据。
3. 根据产物类型(CSV / `visualize_data.bin` / `trace.json`)选择正确查看方式。
4. 避免被模式差异、芯片限制、参数互斥和目录要求误导。
## 执行协议
每次使用本技能时,按下面顺序工作,不要跳步:
1. **先识别用户当前模式**
- 用户到底在问 device、simulator,还是还没决定?
2. **再识别输入形态**
- `application` / `config` / `export`
3. **再识别目标**
- 采集数据、解释产物、选参数、排故、看热点图还是看流水图
4. **只加载必要 reference**
- 若用户重点是上板路径,优先读 `references/device-tuning-guide.md`
- 若用户重点是仿真路径或 dump/trace 解析,优先读 `references/simulator-tuning-guide.md`
- 若用户给了 `signal 6` / `Bad address` 等仿真拉起错误,再读 `experiences/simulator-needs-sim-build.md`
5. **输出时必须显式带条件**
- 说明“这条建议适用于 device 还是 simulator”
- 说明“这条参数是否只对 application / config / export 生效”
## 使用本技能时的硬规则
1. **先分模式,再谈参数。**
- `msprof op ...` = 上板调优。
- `msprof op simulator ...` = 仿真调优。
2. **先分输入形态,再谈命令。**
- `application`:拉起可执行文件。
- `config`:基于 JSON 配置和 `.o` 文件。
- `export`:仅在 simulator 模式下,直接解析已有 dump。
3. **不要把条件化事实说成统一结论。**
- 很多参数只在特定模式、芯片或输入形态下生效。
4. **区分官方事实与经验。**
- 本技能的主说明以当前仓内 `msopprof` 参考代码和 user guide 为准。
- `experiences/` 下的内容视为经验案例,不自动提升为通用规则。
5. **遇到文档口径差异时必须明说。**
- 例如仓内不同章节对通算流水图支持范围有不同表述;若用户追问精确支持范围,优先以当前安装版本帮助信息和对应专章为准。
## 禁止事项
- 不要把 simulator 的 `trace.json` 和 device 的 `trace.json` 混成同一种语义。
- 不要把 `TimelineDetail` 说成 simulator 参数。
- 不要把 `--soc-version` 说成所有 simulator 场景都必选。
- 不要把 `--kernel-name` 说成对 `config` / `export` 也有效。
- 不要把经验文件中的案例说成“所有工程都必须这样”。
- 不要在没有说明前提的情况下,直接给出一个看似通用的命令。
- 没有实际 profiling 数据时,不要强行输出 Top 5 固定报告。
- 数据不足 5 项时按真实数量输出,不要补齐、不造数。
- 不要把命令指导、环境准备或经验猜测伪装成“核心瓶颈”或“优化建议”。
- 不要给出与当前模式明显不兼容的建议(例如把 simulator 参数建议给 device)。
## 快速决策树
1. **你有真实 NPU 卡,且要看真实硬件瓶颈吗?**
- 是:优先走 **上板调优**。
2. **你没有卡,或者要看指令级流水 / 代码热点吗?**
- 是:优先走 **仿真调优**。
3. **你的输入是什么?**
- 可执行文件:`application`
- JSON + `.o`:`config`
- 已有 dump:`export`(仅 simulator)
4. **你要的是哪类结论?**
- 真实耗时 / 内存 / Cache / Roofline:优先上板
- 指令流水 / 每核热点 / 指令级冲突:优先仿真
## 默认输出契约
默认按两条分支输出,不要混用:
### 分支 A:结果分析 / 调优结论 / 报告化输出
满足以下任一条件时,最终回复默认使用**固定四段报告模板**:
- 用户已经给出 profiling 产物或结果现象,要求解释 / 总结 / 诊断 / 调优建议
- 用户明确要求“报告”“模板化输出”“Top 5 结论”
- 当前任务重点是解释 `csv` / `visualize_data.bin` / `trace.json` / 热点图 / 流水图,而不是教用户先跑命令
### 分支 B:命令指导 / 模式选择 / 采集前排障
满足以下场景时,不强制使用固定报告模板,继续使用 guidance-first 输出:
- 用户还没有 profiling 数据,只是在问怎么采集
- 用户重点是选 device / simulator / application / config / export
- 用户处于启动失败、环境不通、参数不会配的阶段
此时优先输出:
1. **建议路径**
- 先明确推荐 device 还是 simulator,以及原因
2. **可直接执行的最小命令**
- 给出与用户当前场景匹配的最小正确命令
3. **关键限制**
- 只列当前问题真正相关的 2~5 条限制
4. **怎么看结果**
- 告诉用户跑完后看哪一个文件、用什么工具打开、重点看什么
5. **下一步**
- 若这是首轮采集:告诉用户下一步该加什么指标
- 若这是排障:告诉用户下一步该补什么信息或切哪条路径
## 固定报告模板(默认用于结果分析)
### 模板启用规则
- 默认 `TOPx = TOP5`
- 如果用户明确指定别的 `x`,可覆盖默认值
- 数据不足 5 项时按真实数量输出,不补齐
- 每个 Top 条目都应尽量带 `数据来源`
- 如果当前模式或数据集不支持某项,写 `N/A`、`未采集` 或 `不适用当前模式`
### 固定标题
结果分析场景下,最终回复默认使用以下四段标题,不要自行改名:
```markdown
## 1. 算子基本信息
## 2. 关键数据 TOP5
## 3. 核心瓶颈 TOP5
## 4. 优化建议 TOP5
```
### 1. 算子基本信息
使用短表格或键值表,不使用 Top 5。默认字段:
| 字段 | 内容 |
|---|---|
| 模式 | device / simulator |
| 输入形态 | application / config / export |
| 算子名 / 目标对象 | 当前分析对象 |
| 芯片 / 仿真器 | 芯片型号或 simulator 类型 |
| 采集指标 | 当前启用的 `aic-metrics` 或主要分析视图 |
| 主要产物 | 当前引用的 CSV / bin / trace |
| 数据来源 | 文件或产物类型 |
缺字段时写 `未提供` / `未采集`,不要脑补。
### 2. 关键数据 TOP5
使用短表格,固定列:
| 排名 | 指标/对象 | 数值/现象 | 意义 | 数据来源 |
|---|---|---|---|---|
填充规则:
- 只放最值得看的关键数据,不要变成全量指标列表
- device 场景优先来自:`OpBasicInfo.csv`、`PipeUtilization.csv`、`ArithmeticUtilization.csv`、`Memory.csv`、`L2Cache.csv`、`ResourceConflictRatio.csv`
- simulator 场景优先来自:`trace.json`、`core*_code_exe.csv`、`core*_instr_exe.csv`、`PMSampling`
### 3. 核心瓶颈 TOP5
使用短表格,固定列:
| 排名 | 瓶颈结论 | 判断依据 | 影响 | 数据来源 |
|---|---|---|---|---|
填充规则:
- 必须把“结论”和“依据”分开
- 没有足够证据时写 `待确认`,不要把猜测写成确定事实
- 不要直接复述经验案例;只有当前现象匹配时,才能把经验作为辅助说明
### 4. 优化建议 TOP5
使用短表格,固定列:
| 排名 | 建议 | 对应瓶颈 | 预期收益/目的 | 前提/来源 |
|---|---|---|---|---|
填充规则:
- 建议必须与“核心瓶颈 TOP5”逐项关联
- 不要给与当前模式不兼容的建议
- 纯命令指导、环境准备或尚未验证的假设,不应冒充优化建议
## 报告模板的模式差异处理
固定模板只有一套,但字段解释按 mode 变化:
- simulator 的 `trace.json` = 指令流水图依据
- device 的 `trace.json` = 通算 / 通信相关流水图依据
- `PMSampling` 只应出现在支持的 simulator 场景
- `TimelineDetail` 只应出现在支持的 device 场景
统一原则:
- 标题和表格列固定
- 数据来源允许按 mode 变化
- 不适用项明确写 `N/A` 或 `不适用当前模式`
## 高频踩坑(优先提醒用户)
- `--kernel-name` **只支持 application 模式**;对 `--config` / `--export` 无效。
- simulator 的 `--config` 场景应通过 `LD_LIBRARY_PATH` 指定仿真器;`--soc-version` 在该场景**不生效**。
- `--export` 仅用于 simulator,且目录中应包含 dump 数据;如需代码行映射,还应包含 `aicore_binary.o`。
- `TimelineDetail` 是 **device 模式能力**,在 simulator 模式下无效。
- `--replay-mode=range` 必须配合 `--mstx=on`。
- `--replay-mode=range` 不能与 `TimelineDetail` / `Source` / `MemoryDetail` 同时使用。
- simulator 默认指标是 `PipeUtilization + ResourceConflictRatio`;`PMSampling` 默认**不开启**。
- `PMSampling` 解析全部核,`--core-id` 对它**不生效**。
- 输出、配置、导出目录会做权限与软链接检查;权限不对时工具会直接报错。
- device 模式里的 `--dump` / `--core-id` 是与特定能力和芯片绑定的特殊行为,不要当成 simulator 通用参数理解。
## 模式与输入形态矩阵
| 模式 | 输入形态 | 是否支持 | 备注 |
|---|---|---:|---|
| device | `application` | Y | 最常见;支持 `--kernel-name`、`--launch-skip-before-match` |
| device | `config` | Y | 基于 JSON + `.o`,`--kernel-name` 不生效 |
| device | `export` | N | 仅 simulator 支持 |
| simulator | `application` | Y | 可用 `--soc-version` 或 `LD_LIBRARY_PATH` 指定仿真器 |
| simulator | `config` | Y | 应使用 `LD_LIBRARY_PATH`;`--soc-version` 不生效 |
| simulator | `export` | Y | 只解析已有 dump,不重新仿真 |
## 常用命令模板
### 上板调优(application)
```bash
# 单算子默认采集
msprof op --output=./output_npu ./execute_add_op
# 采集全量基础指标 + Roofline
msprof op --aic-metrics=Roofline,Default --output=./output_npu ./execute_add_op
# 多算子:采集前 10 个匹配 Add/Sub 的算子
msprof op --launch-count=10 --kernel-name="Add|Sub" --output=./output_npu ./test
```
### 上板调优(config)
```bash
msprof op --config=./add_test.json --aic-metrics=Default --output=./output_npu
```
### 仿真调优(application)
```bash
# 方式 1:显式指定仿真器
msprof op simulator --soc-version=Ascend910B4 --output=./output_sim ./execute_add_op
# 方式 2:通过环境变量指定仿真器
export LD_LIBRARY_PATH=${INSTALL_DIR}/tools/simulator/Ascend910B4/lib:$LD_LIBRARY_PATH
msprof op simulator --output=./output_sim ./execute_add_op
```
### 仿真调优(config)
```bash
export LD_LIBRARY_PATH=${INSTALL_DIR}/tools/simulator/Ascend910B4/lib:$LD_LIBRARY_PATH
msprof op simulator --config=./add_test.json --output=./output_sim
```
### 仿真调优(export)
```bash
msprof op simulator --soc-version=Ascend910B4 --export=./dump_dir --output=./output_sim
```
## 参数边界速查
### 适用于两个模式,但要看输入形态
| 参数 | 说明 | 备注 |
|---|---|---|
| `--output` | 输出目录 | 默认当前目录,受权限与软链接限制 |
| `--launch-count` | 最大采集算子数量 | 默认 `1`,范围 `[1,5000]` |
| `--mstx` | 使能 mstx | `on/off` |
| `--mstx-include` | 只使能指定 mstx message | 必须配合 `--mstx=on` |
| `--kernel-name` | 匹配目标算子名 | **仅 application 模式有效** |
### device 模式
| 参数 | 说明 |
|---|---|
| `--aic-metrics` | 选择上板指标能力 |
| `--replay-mode` | `kernel` / `application` / `range` |
| `--launch-skip-before-match` | 跳过前 N 个算子不采集 |
| `--kill` | 采集完成后自动停止程序 |
| `--warm-up` | 预热次数,默认 `5` |
### simulator 模式
| 参数 | 说明 |
|---|---|
| `--soc-version` | `application/export` 场景可用;`config` 下不生效 |
| `--export` | 解析已有 dump |
| `--timeout` | 超时后强制终止仿真并进入解析 |
| `--core-id` | 只解析指定核,范围 `[0,49]` |
| `--dump` | 是否保留 dump;存在芯片和场景限制 |
## 指标与产物速查
### 上板 `--aic-metrics`
| 指标 | 作用 | 常见产物 | 备注 |
|---|---|---|---|
| `Default` | 基础 CSV 指标 | 多个 CSV | 默认基础采集能力 |
| `Roofline` | Roofline 瓶颈分析 | `visualize_data.bin` | 与 `Default` 绑定 |
| `Occupancy` | 核间负载分析 | `visualize_data.bin` | 仅部分芯片支持 |
| `Source` | 代码热点图 | `visualize_data.bin` | 通常需 `-g` 编译 |
| `MemoryDetail` | L2 / 内存细节增强 | CSV + `visualize_data.bin` | 与 `Default` 绑定 |
| `TimelineDetail` | 指令流水 + 上板热点图增强 | `visualize_data.bin` | device-only,且限制较多 |
| `PipeTimeline` | Pipe 流水图 | `trace.json` + `visualize_data.bin` | 仅Ascend 950PR&950DT系列产品 |
| `KernelScale` | 指定代码段采集 | CSV / 可视化 | 依赖 Kernel 侧插桩 API |
| `PcSampling` | SIMT stall 信息 | `visualize_data.bin` | 仅Ascend 950PR&950DT系列产品 |
| `BasicInfo` | 只采集基础信息 | `OpBasicInfo.csv` | 轻量模式 |
> 说明:
>
> - 如果用户既要 `TimelineDetail` 又要常规 CSV / 计算内存热力图,通常需要显式带上 `Default`。
> - `TimelineDetail` / `Source` / `MemoryDetail` 与 `range replay` 不能共存。
### 仿真 `--aic-metrics`
| 指标 | 作用 | 默认情况 |
|---|---|---|
| `PipeUtilization` | 指令流水 | 默认开启 |
| `ResourceConflictRatio` | 同步事件 / 冲突细节 | 默认开启 |
| `PMSampling` | 内存通路吞吐率波形图 | 默认关闭 |
## 输出产物结构
### 上板模式(单算子常见结构)
```text
OPPROF_{timestamp}_XXX/
├── dump/
├── OpBasicInfo.csv
├── PipeUtilization.csv
├── ArithmeticUtilization.csv
├── Memory.csv
├── MemoryL0.csv
├── MemoryUB.csv
├── L2Cache.csv
├── ResourceConflictRatio.csv
├── visualize_data.bin
└── trace.json # 仅在支持的通算/特定视图场景下生成
```
### 仿真模式(单算子常见结构)
```text
OPPROF_{timestamp}_XXX/
├── dump/
└── simulator/
├── core0.veccore0/
│ ├── 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
├── ...
├── visualize_data.bin
└── trace.json # 全核汇总流水图
```
### 多算子补充说明
- device 多算子输出通常会按 `OpName/<order>/...` 组织,单算子时工具可能自动平铺整理。
- simulator 多算子输出会按 `OpName/<order>/dump|simulator` 组织,且 simulator 目录中的 CSV 常带时间戳后缀。
## 如何看结果
- **CSV 文件**:适合快速查总耗时、带宽、利用率、冲突占比。
- **`visualize_data.bin`**:用 MindStudio Insight 查看热力图、Roofline、热点图、流水图等。
- **`trace.json`**:
- device:主要用于通算/通信相关流水图;
- simulator:主要用于指令流水图(每核与全核汇总)。
- **如果用户只说“看 trace.json”**:必须先判断该文件来自 device 还是 simulator,再决定解释方式。
## 推荐分析流程
### 上板
1. 用 `Default` 跑通一版,先看 `OpBasicInfo.csv` 和 `PipeUtilization.csv`。
2. 开 `Roofline` 判断 Compute Bound / Memory Bound / Latency Bound。
3. 若偏内存:继续看 `Memory.csv` / `MemoryDetail`。
4. 若偏计算:继续看 `ArithmeticUtilization.csv`、必要时看 `Source`。
5. 若怀疑核间不均衡:开 `Occupancy`。
6. 若是通算融合算子:再看 `trace.json`。
### 仿真
1. 先用默认指标(`PipeUtilization + ResourceConflictRatio`)拿到基本流水。
2. 看 MTE 与 VECTOR/CUBE 是否并行,是否有明显 bubble。
3. 看 `SET_FLAG/WAIT_FLAG` 是否造成不必要等待。
4. 如需内存通路波形,再显式开 `PMSampling`。
5. 数据太大时优先用 `--timeout`,热点集中到少数核时再用 `--core-id` 精细化。
## 结果解读提醒
- `Roofline` 与 pipeline 占比的推断是**分析线索**,不是唯一真相;需要结合 CSV/热点图交叉验证。
- simulator 提供的指令级视角更细,但它不等同于真实硬件最终耗时。
- 上板结果更接近真实运行瓶颈,但指令级细节通常不如 simulator 丰富。
## 深度参考
- [上板调优深度指南](references/device-tuning-guide.md) - 上板调优完整流程、关键视图、参数互斥与调优顺序
- [仿真调优深度指南](references/simulator-tuning-guide.md) - 仿真调优完整流程、真实输出结构、热点图与流水图分析
## 经验沉淀
- [经验案例:部分工程的仿真拉起需要仿真兼容构建产物](experiences/simulator-needs-sim-build.md) - 适用于 `signal 6 / Bad address` 一类仿真拉起故障的经验排查
Files in this skill
- SKILL.md
- experiences/simulator-needs-sim-build.md
- references/device-tuning-guide.md
- references/simulator-tuning-guide.md
Attribution
Related skills
View all in devops →Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.