一键导入
shmem-ops-code-review
基于 SHMEM 的算子实现与设计一致性走读,生成 review-report.md。关键词:基于SHMEM代码走读、code review、design review、一致性检查、走读。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
基于 SHMEM 的算子实现与设计一致性走读,生成 review-report.md。关键词:基于SHMEM代码走读、code review、design review、一致性检查、走读。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
根据 design.md 生成基于 SHMEM 的算子代码、CMake、README 和目录结构。关键词:基于SHMEM代码生成、算子实现、code-gen、kernel、CMake。
编译、运行和调试基于 SHMEM 的算子。关键词:基于SHMEM编译调试、compile、debug、build、运行、失败定位。
执行基于 SHMEM 的算子正确性契约验证并生成报告。关键词:基于SHMEM正确性验证、correctness、测试执行、精度验证。
基于 SHMEM 设计通信算子与通算融合算子,将需求转化为 design.md。关键词:基于SHMEM算子设计、算子设计、设计文档、design、Canonical DSL、capability mapping。
基于 SHMEM 的通信算子与通算融合算子端到端开发编排器,串联需求→设计→代码→编译→验证→性能全流程。关键词:基于SHMEM算子开发、端到端开发、算子开发、编排、工作流、通信算子、通算融合。
基于 SHMEM 的算子性能采集、baseline 对比、瓶颈分析和性能报告生成。关键词:基于SHMEM性能评估、性能采集、performance、baseline、bandwidth、性能报告。
| name | shmem-ops-code-review |
| description | 基于 SHMEM 的算子实现与设计一致性走读,生成 review-report.md。关键词:基于SHMEM代码走读、code review、design review、一致性检查、走读。 |
Skill类型:检查型(对比 design.md 和实现代码,输出走读报告)
中文写作要求:review-report.md 必须使用中文撰写。仅 API 名称、代码片段、检查项英文缩写等技术术语保留英文原文。
本 skill 分两种模式执行,由编排器按 Phase 传入 mode:
| 模式 | 触发 Phase | 报告范围 |
|---|---|---|
interim(阶段性) | Phase 5 | Section 1–2 完整;Section 3 填「待补齐」;Section 5 仅判定设计一致性 + 正确性 |
final(终稿) | Phase 7 | 在 interim 基础上补齐 Section 3 性能摘要、Section 5 性能判定、Section 6 全量交付物 |
正确性通过前后都可执行 interim 走读;Phase 5 走读 PASS 是进入 Phase 5.5(或跳过 Torch)的门禁。
步骤 1 读取 design.md、mode 和实现代码
步骤 2 逐项检查(CMake/block_dim/transport/sync/compute/style)
步骤 3 输出走读结果表
步骤 4 生成或更新 review-report.md(按 mode 决定 Section 3/5/6 深度)
| 文件 | 用途 |
|---|---|
| references/code-review-checklist.md | 分类检查项、错误/正确做法示例 |
| references/review-report-template.md | 走读报告输出模板(必须严格按此模板生成) |
| ../shmem-ops-code-gen/references/code-style.md | 代码风格规范,走读时必须对照检查 |
| ../shmem-ops-design/references/implementation-boundary.md | 实现边界、unified kernel 路径 |
| ../shmem-ops-code-gen/references/code-patterns.md | §6.4 统一实现 vs size 分支 |
| references/GUIDE.md | 本 skill 参考索引 |
| ../shmem-ops-dev/references/shmem-repo-resolution.md | 对照仓内 examples 走读前定位 SHMEM_REPO |
MUST 逐项检查并记录结果。任一项未检查即视为 FAIL,不得跳过。
| 检查项 | 严重级别 | 标准 |
|---|---|---|
| CMake target | P0 | 包含 design 声明的所有 kernel、Host helper、transport 源文件;baseline 源码在 baseline/src/,编译 target 在 baseline/CMakeLists.txt,未混入算子 src/ 或根目录 |
| launch block_dim | P0 | 来自 design 或参数化;固定 <<<1>>> 不能作为交付(除非 design 明确要求单核) |
| transport API | P0 | design 声明的 API 实际出现在编译路径中 |
| 跨 PE 传输 | P0 | 使用 aclshmem_* / aclshmemx_*,禁止 DataCopy 写远端 |
| Reduce 累加路径 | P0 | reduce-scatter / allreduce RS 阶段 MUST 使用 SetAtomicAdd<T>()(MTE 批量)+ mte_get_nbi(atomic-add-pattern.md §12 优先级1);禁止以串行 UB 累加(get→UB→Add→写回)作为交付路径 |
| 性能指标计算 | P0 | 整个计算链路 MUST 正确——(1) logical_payload_bytes = elements × sizeof(dtype);(2) algo_bandwidth_GBps = logical_payload / (e2e_us × 1e-6) / 1e9(基于 e2e_us,不乘2,禁止基于 kernel_us);(3) bus_factor 从 timing-and-metrics-standard.md §4.3 唯一参照表取值,禁止使用 n_pes-1 等错误值;(4) e2e_bus_bandwidth_GBps = algo × bus_factor(e2e 口径,仅参考);(5) kernel_bus_bandwidth_GBps = logical_payload / (kernel_us × 1e-6) / 1e9 × bus_factor(kernel 口径,达标主指标);(6) bandwidth_utilization_pct = kernel_bus_bandwidth_GBps / peak_bandwidth × 100。[PERF] 输出 MUST 同时包含 e2e_bus_bandwidth_GBps 和 kernel_bus_bandwidth_GBps 两个唯一字段(禁止同名字段表示不同口径) |
| 源文件 License 头 | P0 | 所有 .cpp、.h、.py、.sh 文件 MUST 包含 CANN Open Software License 头;交付不可省略(见 code-style.md §7.2) |
| SHMEM 接口约束 | P0 | SHMEM 调用 MUST 只用对外 API(aclshmem_* / aclshmemx_*)。若出现 aclshmemi_*:(1) 有公开等价 API → MUST 改为公开 API;(2) 无等价 API → MUST 在 design gap analysis 中有登记记录(见 internal-api-boundary.md) |
| signal/wait 配对 | P0 | 每个 signal 有对应 wait,magic/epoch 策略一致 |
| symmetric 分配顺序 | P0 | 所有 PE 的 symmetric malloc 调用顺序和大小完全一致 |
| e2e 计时口径 | P0 | e2e 起点 MUST = 用户 input(GM) 未被搬运的时刻,终点 = output(GM) 写入完成且 stream sync。做法 A(MTE/SDMA/UDMA kernel 内放置)下 e2e_us≈kernel_us 正常,代码中 MUST 有注释说明引擎选择;做法 B(RDMA 或 Host 侧搬运)下 e2e_us MUST > kernel_us。禁止将搬运移到循环外缩水;禁止为制造差值而在做法 A 上加无意义搬运。详见 timing-and-metrics-standard.md §1.2 |
| error handling 宏 | P1 | MUST 使用 ACL_CHECK / ACL_CHECK_WITH_RET / CHECK_SHMEM 等宏;禁止裸写 if (status != ACL_ERROR_NONE)(见 code-style.md §1.1) |
| 有状态 API 返回值检查 | P1 | 有返回值的 ACL/SHMEM/RT 调用 MUST 检查返回值(如 aclshmem_put_nbi、aclshmem_get_nbi、aclshmem_signal_wait_until、aclrtMalloc 等)。禁止静默忽略返回值(见 code-style.md §1.4) |
| void 同步 API 对称性 | P1 | aclshmem_barrier_all()、aclshmem_finalize() 等返回 void 的同步 API MUST 检查:所有 PE 对称调用(无分支遗漏)、barrier 后无 data race、finalize 前数据已可见。禁止检查不存在的返回值(Host/Device 公开声明均返回 void) |
| README.md 语言 | P1 | MUST 使用中文撰写(见 shmem-ops-dev 原则#0) |
| README.md 结构 | P1 | MUST 遵循 readme-spec.md 完整结构——含算子介绍、环境要求、目录结构、参数说明、编译项目、运行算子、验证结果、性能采集、注意事项等 section |
| 无硬编码路径 | P1 | 脚本/文档/CMake 中 MUST NOT 硬编码用户机器路径,MUST 使用环境变量或相对路径(见 code-style.md §10.1) |
| SHMEMI_PROF 分 phase | P1 | kernel 中 MUST 使用独立 frame_id 覆盖每个关键 phase:至少 copy_in / remote_put_get / signal_or_barrier_wait / local_compute / finalize(≥5 frames;见 timing-and-metrics-standard.md §7) |
| Host 侧 show_prof | P1 | stream sync 后 MUST 调用 aclshmemx_get_prof(nullptr, true) 导出 Device frame 数据(见 timing-and-metrics-standard.md §7) |
| 同步 API 选型 | P1 | phase 同步 MUST 优先 aclshmem_barrier_all() 或 aclshmem_barrier(team);禁止无理由使用 aclshmemx_barrier_all_vec() 替代(仅对齐既有 legacy example 时可保留;见 code-style.md §6.2) |
| phase 边界同步 | P1 | 与 design 一致 |
| tile/chunk/tail | P1 | 按 design 支持并发;非对齐 case 不永久降级为单核 |
| main.cpp 边界 | P1 | 不含复杂计算逻辑;复杂 Host 逻辑已拆模块;不含 route/payload/tiling/packing/golden/checker |
| 性能关键路径 | P1 | 无设计未说明的多余 GM scratch、全局 barrier 或串行 phase;reduce 路径无冗余 GM 中转 |
| unified kernel 路径 | P1 | 默认 single path;无 ≥5% profiling 证据不得保留 small/big 并行路径(见 implementation-boundary、code-patterns §6.4) |
| 代码风格 | P2 | 逐项对照 code-style.md §12 完整审查清单(~32项),每项 MUST 标记通过/不适用/FAIL;禁止笼统声称"已检查" |
走读完成后必须在算子目录生成或更新 docs/review-report.md,严格按照 references/review-report-template.md 格式。
interim 模式(Phase 5)必须完整填写:
待 Phase 6 补齐Section 3 填写规则:所有字段填 待 Phase 6 性能采集后补齐,禁止编造性能数据。
总体结论(interim):设计一致性 PASS + 正确性 PASS → 可进入 Phase 5.5;任一 FAIL → 需修复。
final 模式(Phase 7)在已有 interim 报告基础上更新:
performance_report.md,摘录 baseline vs final 对比表和达标状态若 interim 报告不存在,MUST 先补跑 interim 再走 final。
interim 模式:
final 模式:
performance_report.md 并摘录对比表?| 交付物 | 说明 |
|---|---|
docs/design.md | 设计文档(来自 shmem-ops-design) |
| 算子代码 | src/ + CMakeLists.txt(来自 shmem-ops-code-gen) |
| 测试脚本 | scripts/gen_data.py + check_result.py + scripts/run.sh + run_case_matrix.py(来自 shmem-ops-testcase-gen) |
docs/review-report.md | 走读报告终稿(本 skill final 模式更新) |
docs/correctness_report.md | 正确性验证报告(来自 shmem-ops-correctness-eval) |
docs/case_matrix_report.md | Case Matrix 执行报告(来自 shmem-ops-testcase-gen) |
docs/performance_report.md | 性能报告(来自 shmem-ops-performance-eval / optim) |
Torch 产物(若 meta.torch_required: true) | aclshmem_torch.so + scripts/torch_test_<op>.py |
缺少任一适用交付物不得声称算子完成。
interim 模式 PASS → 进入 Phase 5.5(或按 meta.torch_required 跳过)shmem-ops-code-gen 修正实现,或回 shmem-ops-design 修订设计P0 全部 PASS → 进入 Phase 5.5(或按 torch_required 跳过);FAIL → 回 code-gen 修复或回 design 修订。
performance_report.md 并摘录对比表baseline/src/ 下、编译 target 在 baseline/CMakeLists.txt,未混入算子 src/ 或根目录P0+P1 全部 PASS → 交付完成;任一 FAIL → MUST 修复后重新走读。
block_dim=1 但不标记为 FAILDataCopy 远端地址但不标记为 FAILcode-style.md §12 代码审查清单逐项检查atomic-add-pattern.md §12 决策表bus_factor 公式algo_bandwidth 是否基于 e2e_us、字段是否重复混淆)SHMEMI_PROF frame 分包(单 frame 包裹整个 kernel)aclshmemx_get_prof(nullptr, true) Host 侧是否调用barrier_all() 而非 barrier_all_vec()aclshmemi_* 内部接口final 模式就声称交付完成docs/ 子目录下src/ 或散放在算子根目录(必须归入 baseline/src/)