当用户希望使用 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)时,使用本技能。它负责先判定模式、输入形态与芯片/能力边界,再给出正确命令、结果解读、固定报告输出与高频踩坑规避;不要把经验案例当成通用规则。
Scanned 9/23/2026
Install to Claude Code
npx -y skills add kali20gakki/msAgent --skill msot-msopprof-operator-profiler --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Msot Msopprof Operator Profiler?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/kali20gakki-msot-msopprof-operator-profiler)More formats (shields.io, HTML) on the badges page.
---
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` 一类仿真拉起故障的经验排查
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!