一键导入
shmem-ops-performance-optim
基于 SHMEM 的算子性能优化迭代,固定 5 轮机制优化,每轮输出 Δ% 对比。关键词:基于SHMEM性能优化、调优、optimization、机制优化、性能调优。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
基于 SHMEM 的算子性能优化迭代,固定 5 轮机制优化,每轮输出 Δ% 对比。关键词:基于SHMEM性能优化、调优、optimization、机制优化、性能调优。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
根据 design.md 生成基于 SHMEM 的算子代码、CMake、README 和目录结构。关键词:基于SHMEM代码生成、算子实现、code-gen、kernel、CMake。
基于 SHMEM 的算子实现与设计一致性走读,生成 review-report.md。关键词:基于SHMEM代码走读、code review、design review、一致性检查、走读。
编译、运行和调试基于 SHMEM 的算子。关键词:基于SHMEM编译调试、compile、debug、build、运行、失败定位。
执行基于 SHMEM 的算子正确性契约验证并生成报告。关键词:基于SHMEM正确性验证、correctness、测试执行、精度验证。
基于 SHMEM 设计通信算子与通算融合算子,将需求转化为 design.md。关键词:基于SHMEM算子设计、算子设计、设计文档、design、Canonical DSL、capability mapping。
基于 SHMEM 的通信算子与通算融合算子端到端开发编排器,串联需求→设计→代码→编译→验证→性能全流程。关键词:基于SHMEM算子开发、端到端开发、算子开发、编排、工作流、通信算子、通算融合。
| name | shmem-ops-performance-optim |
| description | 基于 SHMEM 的算子性能优化迭代,固定 5 轮机制优化,每轮输出 Δ% 对比。关键词:基于SHMEM性能优化、调优、optimization、机制优化、性能调优。 |
Skill类型:分析推荐型(读性能数据 → 瓶颈分析 → 输出修改意见 → 委托子 skill 执行改动 → 验证 → 决策)。禁止自行修改算子代码或 design.md。
中文写作要求:performance_report.md MUST 使用中文撰写。仅 API 名称、代码片段、指标名等技术术语保留英文原文。
正确性通过、Phase 6 性能采集完成且编排器因 meta.performance_auto_optim: true 进入 Phase 6.5 后执行(false 时本 skill 不得被调用)。固定 5 轮:Round 1~5 均为机制优化轮(每轮一项代码/机制改动 + 可选参数扫描)。即使中途已达标也 MUST 完成全部 5 轮,以充分挖掘优化空间。
performance_report.md 由 shmem-ops-performance-eval 在每轮采集后写入/追加。优化过程中 NEVER 直接编辑该报告——填表由 eval skill 负责,optim skill 只读取。
big_data/large 路径| 原则 | 说明 |
|---|---|
| 默认 single path | 一套 kernel 逻辑 + UB 分块,覆盖平台 S/L 档 |
| 外层 tile | 仅因 GVA_BUFF_MAX_SIZE / symm 容量触发的分块循环,可保留 |
| 证明后分拆 | size 分支须附 Round 对比数据,未达标则合并删除 |
| 死代码 | if (0)、INT64_MAX 禁用的 large 路径 MUST 在合并后删除 |
| 轮次 | 性质 | 内容 |
|---|---|---|
| Round 1 | 机制优化轮(默认) | 一项代码/机制改动(流水、分核、signal 等)+ 可选参数扫描 |
| Round 2-5 | 机制优化轮 | 每轮一项新机制改动,改动后再扫参数找最优 |
参数 vs 机制的区分:
| 类别 | 定义 | 示例 |
|---|---|---|
| 参数调节 | 改配置值,不改代码结构 | block_dim、chunk_size、TileShape、Swizzle offset/direction、transfer_size、UB buffer 大小 |
| 机制改动 | 改代码逻辑/算法 | 加 ping-pong double buffer、实现 sender/receiver 分核、barrier→signal/wait、增加流水级数、engine 切换(MTE→SDMA)、通信-计算 overlap |
┌──────────────────────────────────────────────────────────────┐
│ OptimStep 1: 瓶颈定位(读 performance_report + design) │
│ OptimStep 2: 基线锁定(确认全部基线指标) │
│ OptimStep 3: 输出修改意见 │
│ ├── 设计级改动 → 委托 shmem-ops-design 修订 design.md │
│ │ → 跳过 testcase-gen │
│ └── 代码级改动 → 委托 shmem-ops-code-gen 修改代码 │
│ → 委托 shmem-ops-compile-debug 编译 │
│ (compile-debug 不改代码,失败回 code-gen)│
│ → 委托 shmem-ops-correctness-eval 正确性 │
│ OptimStep 4: 性能验证(调用 shmem-ops-performance-eval 采集并填入报告)│
│ OptimStep 5: 迭代决策(keep / revert) │
│ ↓ < 5 轮 → 回 OptimStep 1(无论是否达标) │
│ OptimStep 6: 最终确认(检查报告完整性) │
└──────────────────────────────────────────────────────────────┘
| 文件 | 阅读时机 | 用途 |
|---|---|---|
| references/optimization-patterns.md | OptimStep 1 定位瓶颈后选择对应优化 | 通信、流水线、同步、内存、分核优化手段 |
| references/compute-optimization.md | 当瓶颈在 compute 部分时 | 通算融合中 Matmul/Compute 调优 |
| ../shmem-ops-performance-eval/references/device-profiling-guide.md | OptimStep 4 性能验证采集 frame 数据 | SHMEMI_PROF 打点操作方法 |
| ../shmem-ops-performance-eval/references/perf-chat-output-spec.md | OptimStep 4 完成后、OptimStep 6 交付前 | 每轮聊天自动输出:Round Δ% 表、累计总览、最终对比 |
| ../shmem-ops-performance-eval/templates/performance-report.md | OptimStep 1 读取报告、OptimStep 6 最终确认 | 性能报告模板(由 eval skill 维护) |
| ../shmem-ops-design/references/hardware-architecture.md | OptimStep 1 和每轮参数调优时 | 昇腾硬件参数速查(核数、带宽)——调参时 NEVER 超出硬件上限 |
| ../shmem-ops-compile-debug/references/custom-ops-entrypoints.md | OptimStep 3 委托 compile-debug 编译时 | custom-ops 编译入口命令 |
| ../shmem-ops-dev/references/shmem-repo-resolution.md | 读仓内文件前 | 定位 SHMEM_REPO |
| ../shmem-ops-dev/references/docker-exec-contract.md | 用户指定 Docker 时 | 全部 build/run/perf 必须 docker exec,禁止宿主机裸跑 |
| ../shmem-ops-code-gen/SKILL.md | OptimStep 3 委托 code-gen 时 | code-gen 入口与输入契约 |
shmem-ops-correctness-eval)design.md 中 meta.performance_required: true 且 meta.performance_auto_optim: trueshmem-ops-dev 编排器门控后调用本 skill)design.md 中有明确性能目标达标线用于评估结论,NEVER 作为提前停止条件——进入 Phase 6.5 后 MUST 完成全部 5 轮。
| 情况 | 达标线(通信算子) |
|---|---|
| 有 baseline(HCCL/已有实现) | kernel_bus_bandwidth_GBps 达标线:默认 ≥ baseline 的 80% |
| 无 baseline,通信算子 | kernel_bus_bandwidth_GBps 对应带宽利用率 ≥ 20% |
| 无 baseline,通算融合 | 达到 design 指标目标 |
e2e_latency 仅作参考;Round 间性能变化对比 MUST 用 kernel_bus_bandwidth_GBps,NEVER 用 e2e 带宽。
Round 0(首次):Round 0 基线数据已由 Phase 6 eval 生成。若 performance_report.md 不存在(异常中断恢复),则调用 eval 补齐 §1-§3。
Round 1+:已有前序轮次的性能报告。
当性能差距极大(与 baseline 相比不到 50%,或无 baseline 但 bus_bandwidth 利用率极低)时,优先检查算法选择本身是否匹配硬件拓扑,再进入细粒度排查。
步骤:
输出:在瓶颈列表最前面标注算法级判断。
按以下 5 类系统排查:
| 排查类别 | 指标/现象 | 典型瓶颈信号 |
|---|---|---|
| 通信带宽 | algo_bandwidth 远低于理论带宽 | chunk 太小、engine 选择不当、无 overlap |
| 同步开销 | kernel_us 中大量时间在 barrier/wait | 全局 barrier 过多、signal 粒度太粗 |
| 核利用率 | 部分核空闲或 tail 核负载翻倍 | 分核比例不当、负载不均衡 |
| 内存效率 | 多余 GM scratch 读写、未对齐搬运 | UB 未充分利用、buffer 未对齐 |
| 流水深度 | 通信和计算串行、无 double buffer | 缺少 ping-pong、phase 间无 overlap |
输出:按优先级排列的瓶颈列表,每项标注排查类别和预期收益。
确认基线数据(来自 shmem-ops-performance-eval 生成的 performance_report.md §3):
| 指标 | 适用 | 值 |
|---|---|---|
| e2e_latency_us | 全部 | [从 §3.1 获取] |
| kernel_latency_us | 全部 | [从 §3.1 获取] |
| algo_bandwidth_GBps | 全部 | [从 §3.1 获取] |
| kernel_bus_bandwidth_GBps | 全部 | [从 §3.1 获取] |
| bandwidth_utilization_percent | 通信算子 | [从 §3.2 获取] |
| compute_utilization_percent | 通算融合算子 | [从 §3.3 获取];纯通信标 N/A |
本 skill 禁止自行修改算子代码或 design.md。 所有改动必须委托对应子 skill 执行。
根据 OptimStep 1 瓶颈分析,将本轮优化方向分类并输出结构化意见:
| 分类 | 改动范围 | 委托目标 |
|---|---|---|
| 设计级 | 分核策略、调度 phase 重构、算法变更(ring→mesh)、topology 适配 | shmem-ops-design 修订 design.md |
| 代码级 | engine 切换、double buffer、signal/wait 替换、block_dim/chunk_size 调整 | shmem-ops-code-gen 修改代码 |
每条意见 MUST 包含:改什么、为什么(关联 OptimStep 1 的瓶颈)、预期收益(Δ% kernel_bus_bandwidth_GBps)。
机制改动参考(从 optimization-patterns.md 或 compute-optimization.md 选择):
| 机制改动 | 说明 | 分类 | 参考 |
|---|---|---|---|
| Ping-pong double buffer | 增加双缓冲流水,掩盖搬运气泡 | 代码级 | optimization-patterns.md §2.1 |
| Copy-to-symmetric overlap | sender/receiver 分核 + 逐 chunk signal | 代码级 | optimization-patterns.md §1.1 |
| Engine 切换 | MTE→SDMA 或 MTE→RDMA | 代码级 | optimization-patterns.md §1.2 |
| Barrier→signal/wait | 全局 barrier 替换为点对点同步 | 代码级 | optimization-patterns.md §3.1 |
| 通信-计算 overlap | chunk k 通信与 chunk k-1 计算重叠 | 代码级 | optimization-patterns.md §2.2 |
| 分核策略调整 | core partition 比例、send/recv 核数分配 | 设计级 | optimization-patterns.md §5 |
| 算法级重构 | 串行 fetch→并发 peer 通信、ring→mesh | 设计级 | OptimStep 1 算法级排查 |
参数扫描(block_dim、chunk_size、transfer_size 等)属于代码级改动,同样委托 code-gen 执行。每次参数变更记录为一个 step(step N.1、N.2...)。
修改意见输出后,按以下顺序委托子 skill 执行。本轮所有 step 共享同一委托链——每个 step 变更参数后重新走 code-gen → compile → correctness 循环。
shmem-ops-design 修订 design.md。修订完成后 跳过 testcase-gen(测试用例不变),进入步骤 2shmem-ops-code-gen 修改代码shmem-ops-compile-debug 执行构建与诊断(compile-debug 只诊断不改代码,编译失败回 code-gen 修复后重试)。编译命令见 custom-ops-entrypoints.md §1shmem-ops-correctness-eval。正确性失败的 step NEVER 采纳为性能结论每个 step MUST 记录:
| 字段 | 说明 | 格式约束 |
|---|---|---|
| Step ID | 轮次.序号 | MUST 为 1.1、2.3 等格式,NEVER 使用其他格式 |
| 变更描述 | 具体改了什么 | MUST 包含具体参数值(如 block_dim: 16→32),NEVER 使用笼统描述 |
| Correctness | 正确性结果 | 只允许 PASS / FAIL,NEVER 使用模糊值 |
| e2e_us | 端到端延迟 | MUST 为数值 |
| kernel_us | 纯 kernel 延迟 | MUST 为数值 |
| kernel_bus_bandwidth_GBps | 总线带宽(kernel 口径) | MUST 为数值;Round 对比主指标 |
| algo_bandwidth_GBps | 算法带宽 (GBps) | MUST 为数值 |
| e2e_bus_bandwidth_GBps | e2e 总线带宽 (GBps) | 参考;NEVER 作 round 对比主指标 |
| compute_utilization% | 计算利用率 | 通算融合算子 MUST 填写,纯通信算子标记 N/A |
| 备注 | 观察到的现象 | 如"核利用率从 60%→90%" |
Step 表列名与
timing-and-metrics-standard.md标准字段对齐。table headers in §4 of performance_report.md MUST use these exact names.
调用 shmem-ops-performance-eval 重新采集性能数据,由 eval skill 将结果写入 performance_report.md 对应 Round 的 §4 子节。
L 档固定 case:优化轮次 MUST 使用 Round 0 锁定的平台区 base_count/dtype/PE,NEVER 每轮换 payload(否则不可比)。
每轮最优 step 确定后(is_optimal_step=true),eval 与 optim MUST 在聊天自动输出(无需用户追问):
模板见 perf-chat-output-spec.md §3。NEVER 只在 Round 5 结束才输出变化。
optim 调用 eval 时 MUST 附带以下上下文,使 eval 知道写入报告的位置:
| 参数 | 含义 | 值 |
|---|---|---|
target_section | 写入目标区域 | round_0(基线采集)、round_N_step_M(如 round_1_step_3) |
round_label | 轮次标签 | Round 0 基线、Round 1 机制优化:并发 peer put、Round 2 机制优化:double buffer |
is_optimal_step | 是否为该轮最优 step | true(需输出 Device Frame)、false(仅填 step 表行) |
eval skill 根据上下文写入的位置:
| target_section | is_optimal_step | 写入内容 |
|---|---|---|
round_0 | — | §2 Baseline 详细信息 + §3.1~§3.5 L 档基线数据 + S 档数据(供 §6.2) |
round_N_step_M | false | 在 §4 Round N 的 Step 表中追加一行(仅 L 档) |
round_N_step_M | true | Step 表行 + 性能验证对比表 + Device Frame Table(均仅 L 档) |
round_N_step_M | true(且为最终轮次) | 上述内容 + §5 轮次总览行 + §6.1 L 档对比 + §6.2 S 档对比 + §7 结论 |
optim skill 从 OptimStep 5 得到的结构化数据格式:
性能验证对比表(由 eval 填入 §4 各 Round 末尾):
| 指标 | Baseline | Round N 最优 | Δ% |
|---|---|---|---|
| kernel_bus_bandwidth_GBps | |||
| e2e_latency_us | |||
| kernel_latency_us | |||
| algo_bandwidth_GBps | |||
| e2e_bus_bandwidth_GBps | |||
| compute_utilization_pct |
compute_utilization_pct 行仅通算融合算子填写;纯通信标 "N/A"
Device Frame Table(由 eval 填入 §4 各 Round "Device Frame(最优 step)" 子节):
| Frame | Phase | Avg us | Max core us | Count | % E2E | Bottleneck |
|---|
若该轮仅一个 step,取该 step 的 frame 数据;若多个 step,取最优 step 的 frame 数据。
| 决策 | 条件 |
|---|---|
| keep | 本轮最优 step 性能提升且正确性通过 → 采纳该 step 配置作为新基线 |
| revert | 本轮所有 step 性能退步或正确性失败 → 恢复上一轮最优配置 |
决策后:若轮次 < 5 → 回 OptimStep 1 开始下一轮(无论是否已达标)。
所有轮次完成后(无论达标与否),按以下步骤最终确认:
| 检查项 | 内容 |
|---|---|
| 节号与模板一致 | §1~§7 完整,无自定义新增章节(如"采集命令"、"指标公式"、"正确性回归") |
| 节名与模板一致 | 使用模板定义的标准节名("算子信息"、"Baseline 详细信息"等),不自行重命名 |
| 表结构一致 | 列名、列数、列顺序与模板完全相同 |
| §3.2 / §3.3 适用性标注 | 通信算子 §3.3 标注 "N/A",通算融合 §3.2 不得标 N/A |
| Device Frame Table | §3.4 和 §4 每个 Round 最优 step 均存在,无空表 |
| §4 每个 Round 结构完整 | Step 表 + 性能验证对比表 + Device Frame + 本轮最优配置 + 决策 |
| §5 轮次总览 | 行数与实际轮次数一致,含 Round 0 |
| compute_util% 列 | 纯通信算子标 "N/A",通算融合算子必须填写 |
完整性确认:report MUST 包含以下全部内容 → 对应模板位置:
算子信息(名称、shape、dtype、PE 数、目标指标)→ §1
Baseline 详细信息 → §2
基线数据(Round 0 的完整指标 + 通信指标表 + 计算指标表 + Device Frame Table + 性能对比表)→ §3
每轮每步的完整记录(Step 表 + 性能验证对比表 + Device Frame Table)→ §4 各 Round
轮次总览表 → §5
最终对比表(baseline vs final,含 Δ%)→ §6
结论(达标/未达标 + 瓶颈总结 + 优化路径)→ §7
交付:确认通过后输出 docs/performance_report.md 路径。
performance_report.md 由 shmem-ops-performance-eval 在每轮执行时维护,位于算子目录 docs/performance_report.md。
每轮记录(Round 级):
| Round | 性质 | 机制改动 | 最优 Step | 最优 kernel_bus_bandwidth_GBps | vs R0 | vs baseline | 决策 |
|---|---|---|---|---|---|---|---|
| 0 | baseline | — | — | ... | ... | ... | — |
| 1 | 机制优化 | 并发 peer 通信 | 1.3 | ... | ... | ... | keep |
| 2 | 机制优化 | 加 ping-pong double buffer | 2.2 | ... | ... | ... | keep |
compute_util% 列仅通算融合算子填写;纯通信标 N/A
每步记录(Step 级,嵌套在 Round 内):
| Step | 变更 | Correctness | kernel_bus_bandwidth_GBps | e2e_us | kernel_us | 备注 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 1.1 | block_dim: 16→32 | PASS | ... | ... | ... | ... | N/A | 核利用率提升 | | 1.2 | block_dim: 32→48 | PASS | ... | ... | ... | ... | N/A | 无明显提升 | | 1.3 | chunk_size: 64KB→190KB | PASS | ... | ... | ... | ... | N/A | 带宽提升 20% |
最终交付 MUST 在算子目录下生成 docs/performance_report.md,由 shmem-ops-performance-eval 按模板格式维护。
performance_auto_optim: false 时擅自进入本 skill 或改 kernelbig_data/large 与 unified 路径并行维护输入到对称堆的拷贝 → symmetric memory → kernel 的完整流程。跳过输入到对称堆的拷贝的"优化"只是在测试中作弊,不反映实际部署性能e2e_latency_us 不包含输入到对称堆的拷贝时间。e2e 性能循环 MUST 每轮都执行 input(GM) → 输入到对称堆的拷贝 → symmetric memory → barrier → kernel 完整流程.cpp/.h/CMakeLists.txt)——必须委托 shmem-ops-code-gendesign.md ——必须委托 shmem-ops-design