skills/ascendc-operator-performance-optim/SKILL.md
排查并优化 Ascend C 算子性能。当用户开发、审查或优化 Ascend C kernel 算子时使用,或当用户提及 Ascend C 性能优化、算子优化、tiling、流水、搬运、 内存优化、NPU/昇腾等关键词时触发。
npx skillsauth add Ascend/agent-skills ascendc-operator-performance-optimInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
本 skill 不仅排查性能问题,还负责 修改代码并验证优化效果。完整流程为:
Phase 1: 排查 — 审查代码 + 学习设计文档,发现优化点
Phase 2: 基线 — 保存当前性能测试结果(自定义算子 vs 标杆)
Phase 3: 优化 — 学习 code-gen 知识后修改算子代码
Phase 4: 精度 — 精度验证(确保优化后功能正确)
Phase 5: 性能 — 同 case 性能对比(优化后 vs 标杆)
Phase 6: 迭代 — 未提升则继续优化,最多 3 轮
MANDATORY — 排查前必须先理解算子设计:
ascend-kernel/csrc/ops/<op_name>/design.md(若存在),提取:
op_host/<op_name>.cpp 和 op_kernel/<op_name>.cpp 全部源码按以下顺序逐阶段审查算子代码。对每个阶段,加载对应的 reference 文件,逐项 对照代码检查。
- [ ] 1. Tiling — 数据在多核与 L2Cache 间的切分策略
- [ ] 2. 搬运 — DataCopy 的带宽利用率
- [ ] 3. API 使用 — Ascend C API 的高效用法
- [ ] 4. 内存 — 数据在存储层级中的放置策略
- [ ] 5. 流水 — CopyIn / Compute / CopyOut 的重叠执行
每个阶段有独立的 reference 文件,排查时仅加载当前阶段的文件:
详细示例:references/tiling-prof.md
排查项:
blockDim 是否设为硬件核数?
GetCoreNumAiv() 或 GetCoreNumAic()输入 + 输出 > L2Cache 容量 时,是否将数据
按 L2Cache 大小分块,所有核协同处理同一块后再切换下一块?详细示例:references/data-copy-prof.md
排查项:
DataCopy 是否搬运至少 16 KB?
小于此值带宽利用率显著下降。DataCopyParams
(blockCount/blockLen/srcStride/dstStride)一次下发,而非用 for 循环逐行搬运?详细示例:references/api-usage-prof.md
排查项:
TPipe 是否在 kernel 入口函数中创建
并以指针传入类?(类内 TPipe 会阻止 Scalar 常量折叠,增加约 17% scalar_time。)TQueBind<VECIN, VECOUT> 替代了分离的 TQue<VECIN> + TQue<VECOUT>?
(消除冗余的 LocalTensor 间 DataCopy,aiv_vec_time 降至约 0。)IterateAll/GetTensorC 中设置 enAtomic=1 融合累加?
(可减少约 12% cycle。)BlockReduceSum + WholeReduceSum 组合,而非多次相同归约指令?详细示例:references/memory-prof.md
排查项:
A1*B1 + A2*B2 + ... 场景下,Mmad 结果是否
在 CO1(L0C)中原地累加,而非逐次写 GM 再在 UB 求和?Mmad 一步融合,而非在 UB 中单独做 Add?Fixpipe 随路量化,而非在 UB 中单独计算?详细示例:references/pipeline-prof.md
排查项:
TQue 进行级间同步?InitBuffer 的 buffer 个数是否设为 2,
使 CopyIn/CopyOut 与 Compute 重叠执行?
(前提:循环次数 >= 2,且搬运时间相对计算时间不可忽略。)Iterate<false>()/IterateAll<false>() 避免每次迭代的 AIC/AIV 同步开销?排查完所有阶段后,按以下格式输出汇总:
## 优化排查报告
### 发现的问题(按预期收益排序)
1. [阶段 X.Y] <问题描述> — <预期收益>
2. [阶段 X.Y] <问题描述> — <预期收益>
...
### 已确认无问题
- [阶段 X.Y] <检查项描述>
...
### 优化计划
按预期收益从大到小排列,确定本轮优化的目标项。
优化前必须保存性能基线,以便优化后精确对比。
检查 csrc/ops/<op_name>/test/ 下是否已存在:
<op_name>_perf_cases.jsonl — 性能测试用例<op_name>_torch_npu_profiler_report.md — 性能对比报告若上述文件不存在或结果已过时(如代码已更新但报告未重新生成),MUST 调用
ascendc-operator-performance-eval skill 完成完整性能评估:
ascendc-operator-performance-eval SKILL.md将当前性能报告备份为基线文件,命名为 <op_name>_baseline_report.md,
保存在同一 test/ 目录下。该文件后续用于对比优化效果。
csrc/ops/<op_name>/test/
├── <op_name>_perf_cases.jsonl ← 性能用例(优化前后共用)
├── <op_name>_torch_npu_profiler_report.md ← 当前报告(会被覆盖)
└── <op_name>_baseline_report.md ← 基线快照(优化前的性能数据)
修改代码前 MUST 加载 ascendc-operator-code-gen skill 的 reference 文件,
确保对 AscendC API、数据搬运、同步控制等有准确理解。
按需加载以下 reference(位于 ascendc-operator-code-gen/references/):
| Reference 文件 | 用途 |
|---------------|------|
| GUIDE.md | 总览:模板选择、代码生成流程 |
| data-copy-api.md | DataCopy/DataCopyPad API 详解 |
| vector-compute-api.md | Vector 计算 API 详解 |
| sync-control-api.md | TQue/Pipe 同步控制 |
| resource-management-api.md | TPipe/TBuf 资源管理 |
| basic-data-structures-api.md | LocalTensor/GlobalTensor 等基础结构 |
| kernel-constraints.md | Kernel 编程约束与常见陷阱 |
根据 Phase 1 发现的优化点,选择性加载相关 reference。例如:
data-copy-api.mdsync-control-api.md + resource-management-api.mdvector-compute-api.md针对 Phase 1 排查报告中的每个优化点,制定具体的代码修改方案:
优化点 [X.Y]: <问题描述>
├── 修改文件: op_host / op_kernel / 两者
├── 修改内容: <具体代码变更描述>
├── 预期效果: <量化预期(如搬运时间减少 30%)>
└── 风险评估: <是否可能影响精度/是否需要修改 tiling>
按照修改方案逐一修改代码。修改时遵守以下规则:
MUST 遵守 code-gen 反模式清单:
std::min/max/abs/sqrt/exp 等标准库函数cmake/ 或 csrc/utils/ 下的文件修改完成后必须重新编译安装:
source ${ASCEND_HOME_PATH}/set_env.sh
cd task/ascend-kernel
bash build.sh
pip install output/ascend_kernel*.whl --force-reinstall --no-deps
编译失败时进入排错循环(最多 3 次)。
MANDATORY — 优化后必须先通过精度验证再进行性能对比。
读取并执行 ascendc-operator-precision-eval SKILL.md 的完整流程:
| 结果 | 处理 | |------|------| | 全部通过 | 进入 Phase 5 性能验证 | | 部分失败 | 分析失败原因,回退或修复代码,重新进入 Phase 3 | | 大量失败 | 回退本轮所有修改,重新分析优化方案 |
使用 Phase 2 中相同的性能用例(<op_name>_perf_cases.jsonl),调用
ascendc-operator-performance-eval skill 重新执行性能评估。
关键要求:
<op_name>_torch_npu_profiler_report.md将优化后的性能数据与 Phase 2 保存的基线进行对比:
## 优化效果对比
| Case | Shape | dtype | 基线 per-step(us) | 优化后 per-step(us) | 提升比 | 标杆 per-step(us) | vs 标杆 |
|------|-------|-------|-------------------|--------------------|---------|--------------------|---------|
| ... | ... | ... | ... | ... | ... | ... | ... |
### 汇总
- 平均提升: X%
- 最大提升: X%(Case Y)
- vs 标杆平均比值: 优化前 A → 优化后 B
| 结果 | 处理 | |------|------| | 性能提升(大部分 case 优化后更快) | 优化成功,输出最终报告 | | 性能未提升或回退 | 进入 Phase 6 迭代优化 |
若 Phase 5 判定性能未提升,进入迭代:
当前轮次: N (N ∈ {1, 2, 3})
├── N < 3: 回到 Phase 1,选择下一优先级优化点或调整方案
│ ├── 重新排查,分析上一轮修改为何未生效
│ ├── 选择新的优化点或调整上一轮的方案
│ └── 重复 Phase 3 → Phase 4 → Phase 5
│
└── N = 3: 停止迭代,输出最终报告(含所有轮次记录)
每轮迭代必须记录:
### 第 N 轮优化
- 优化目标: [阶段 X.Y] <描述>
- 修改内容: <代码变更摘要>
- 精度结果: 通过 / 失败
- 性能结果: 提升 X% / 未提升 / 回退 Y%
- 决策: 保留本轮修改 / 回退 / 继续下一轮
所有轮次完成后(成功提升或达到 3 轮上限),输出最终汇总报告。
MUST 在对话中展示以下内容,NEVER 仅输出文件路径:
csrc/ops/<op_name>/test/
├── <op_name>_perf_cases.jsonl ← 性能用例
├── <op_name>_baseline_report.md ← 优化前基线
├── <op_name>_torch_npu_profiler_report.md ← 优化后最终性能报告
├── <op_name>_precision_report.md ← 精度验证报告
└── <op_name>_optim_summary.md ← 优化迭代汇总报告(新增)
csrc/ops/<op_name>/
├── op_host/<op_name>.cpp ← 优化后的 host 代码
└── op_kernel/<op_name>.cpp ← 优化后的 kernel 代码
<op_name>_optim_summary.md 必须包含:
# <op_name> 性能优化报告
## 排查发现
(Phase 1 的排查报告内容)
## 优化前基线
(Phase 2 的性能数据摘要)
## 迭代历史
### 第 1 轮
- 优化目标: ...
- 代码修改: ...
- 精度结果: ...
- 性能结果: ...
### 第 N 轮
...
## 最终性能对比
(优化前 vs 优化后 vs 标杆 三方对比表)
## 结论
(≥3 条关键发现)
_baseline_report.md)ascendc-operator-precision-eval 流程完成精度验证_optim_summary.md)testing
Kubernetes 集群健康检查与安全修复 — 诊断问题,用户确认后执行修复
tools
昇腾NPU CANN Toolkit+Kernels+NNAL安装部署技能。支持从官网下载run包安装和从Docker镜像提取两种方式,覆盖驱动检查、包下载、安装、环境变量配置与验证全流程。当用户需要安装CANN全套组件或指定版本CANN到自定义路径时调用。
development
编译 ATB (Ascend Transformer Boost) 测试框架。当用户需要编译 ATB 测试框架、 运行 CSV 测试、或构建 atb_test_framework 时调用。支持全量编译(含第三方依赖克隆与源替换) 和增量编译两种模式。需在 Docker 容器内配合 CANN 环境执行。
databases
ATB OPS→ACLNN 迁移标准化工作流主模板。整合前置学习、设计文档生成、CSV用例设计、 实际迁移、编译验证、测试验证全流程,提供明确的阶段 Gates 和用户确认机制。