| 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;禁止笼统声称"已检查" |