TileLang-NPUIR 算子设计文档检视
1. 目标
对 Stage 1 产出的 DESIGN.md 进行风险优先的检视,生成一份 REVIEW.md。REVIEW.md 必须包含明确的 结论: 通过 或 结论: 不通过,以及不通过时的具体修改建议,供 conductor 决定是否进入 Stage 3 或回退 Stage 1 重新设计。
迁移任务(DESIGN.md 含 §0 源算子解读与迁移分析)必须额外执行维度 0:源算子理解与迁移分析——检视 Stage 1 是否真正读懂了源算子(语义 / 算法 / 优化手段)、硬件耦合性判定是否合理、NPU 重设计是否可行且语义保持。
所有任务必须执行维度 8:算法优化分析——检视 Stage 1 是否先完成了算法调研(§1.6.0 调研四问齐全:等价化简公式 / 在线算法 / 复杂度 / 硬件亲和;调研结论经独立复核成立,且选定算法实际驱动 §1.4 与 §1.6.1–§1.6.3),是否先数学等价地优化了公式(更少计算量 / 访存量,且等价性论证成立),循环 / 标量计算是否已完成向量化替代分析(替代不了的必须有充分理由,且与 §3/§6 一致),以及是否完成了向量化轴与核内数据布局决策(候选矩阵 + 量化取舍;I/O layout 是契约、核内布局是设计变量,弃选方案必须有量化理由)。
2. 输入
| 字段 | 说明 |
|---|---|
design_md_path |
待检视的 DESIGN.md 路径(由 conductor 传入) |
source_op_path |
迁移任务必传:源算子文件路径,用于核对 §0 解读是否与源码一致 |
| 算子目录 | examples/{project}/{op}/,用于核对同类实现引用是否真实存在 |
检视前必须用 Read 完整读取 DESIGN.md;迁移任务还必须用 Read 读取 source_op_path 指向的源算子代码;并用 Glob 核对 DESIGN.md 中引用的 examples/ 文件是否真实存在。
3. 检视维度(风险优先,按顺序)
优先识别会直接导致 Stage 3 编译/运行/精度失败的阻塞级问题,其次识别建议级问题。迁移任务检视维度 0–8(共 9 项),非迁移任务检视维度 1–8(共 8 项,维度 0 标记 n/a 不输出)。
维度 0:源算子理解与迁移分析(阻塞级,仅迁移任务)
检视方式:亲自 Read 源算子代码,与
DESIGN.md§0 逐项核对。不读源码的检视无效。
| 检查项 | 通过标准 | 不通过示例 |
|---|---|---|
| 语义理解正确性 | §0.1 的数学语义、规约语义(累加顺序)、dtype 语义、边界语义与源码实际行为一致;§0.2 I/O(含输出 shape / 转置布局)与源码签名一致 | 源码 fp32 累加,§0.1 写成 fp16 计算;输出 shape 与源码不一致 |
| 算法解读完整性 | §0.3 计算步骤分解覆盖源码全部计算语句(无遗漏步骤、无臆造步骤);数据流图覆盖全部 buffer;host 侧逻辑已列出 | 源码 host 侧有 im2col,§0.3 未提及 |
| 优化手段覆盖完整性 | §0.4 列出源码中的主要优化手段且逐项标注硬件依赖;未把实现层优化误判为算法层(或反之) | 源码含 warp shuffle 归约 / T.Pipelined 流水,§0.4 未识别 |
| 耦合性判定合理性 | §0.5 每个条目有四态处置(保留/等价替换/重新设计/舍弃)+ 依据;处置与 GPU→NPU 能力映射表及 ascend-constraints 不矛盾;舍弃项写明理由 | warp shuffle 判"保留";三维 Kernel 无展开方案;舍弃优化项无理由 |
| NPU 重设计可行性 | §0.6 每个重设计项有「源方案 → NPU 新算法 → 语义保持论证」三要素;新算法满足 NPU 硬件约束(一维 Kernel、内存层级、分形、对齐、容量) | 重设计仍用三维 Kernel;重设计未论证累加顺序变化对精度的影响 |
| 设计与决策一致性 | §1–§7(概述/API 映射/内存规划/Tiling/循环/同步)描述的是 §0.5/§0.6 决策后的 NPU 算法;无"§0 判重设计、§3 照抄源方案"的脱节 | §0.5 判定舍弃 SMEM swizzle,§3 仍保留布局重排步骤 |
| golden 独立性 | §8.1 golden 以 §0.1 源算子语义为依据实现(优先移植源仓参考实现),未复刻 §0.6 的 NPU 算法 | golden 直接翻译 NPU 数据流,精度对比沦为自证 |
维度 1:API 可行性(阻塞级)
| 检查项 | 通过标准 | 不通过示例 |
|---|---|---|
| API 存在性 | DESIGN.md §3.2 列出的每条 TileLang DSL API 能在 examples/ 或 tilelang/language/ 中找到使用佐证 |
设计用了 T.flash_attention 但项目无此 API |
| API 与模式匹配 | Developer 模式用自动同步 API;Expert 模式才用手动 set_flag/wait_flag | Developer 模式却写手动同步 |
| v-prefix 优先 | 新设计优先 v-prefix API(vadd/vmul/vexp/vcast/vbrc),npuir_xxx 仅作兼容说明 | — |
维度 2:内存层级规划(阻塞级;可机检子集:design_calc_check.py ub/l1/l0c_budget 复算——VP-2026-0009 混合字节口径类错误的机械拦截位)
| 检查项 | 通过标准 |
|---|---|
| 搬运路径完整 | §4.4 给出完整 GM → L1/UB → L0 路径,无 GM→L0 直连等越级路径 |
| UB 预算 | §4.5 中间缓冲区总和不超过目标平台 UB 容量(A2/A3 = 192KB) |
| L0C 容量 | Cube 类算子 block_M × block_N × sizeof(accum) ≤ 128KB |
| Buffer 层级标注 | 每个 buffer 标注存储层级(UB/L1/L0A/L0B/L0C) |
维度 3:Tiling 策略(阻塞级;可机检子集:design_calc_check.py core_split 逻辑核数算术复算)
| 检查项 | 通过标准 | 不通过示例 |
|---|---|---|
| Block 划分明确 | §5.2 给出 block_M/block_N 具体值及理由 | — |
| 对齐约束 | 尾轴对齐满足(fp16 ≥ 16B 等) | — |
| 非整除处理 | GEMM 类必须含 padding+crop 或动态 block 策略;纯 Vector 若 shape 不被 block 整除也需说明 | — |
| 分核策略(物理核数适配) | §5 含分核策略三要素(① 逻辑核数计算 / ② 物理核数依据〔NPUUtils.get().get_aicore_num() 实查并记录查询代码与返回值〕/ ③ 规模判定与分核方案);核数与 block 取值自洽——核对标准:.agents/skills/_shared/standards/core-split-strategy.md §1(检视要点见其 §2.2) |
逻辑核数远超物理核数却无核内串行设计;物理核数非实查(无 NPUUtils 查询记录或使用文档假设/经验值);启动 21 核类负载不均未处理;核内串行任务数依赖动态 shape |
维度 4:技术约束检测(阻塞级)
| 检查项 | 通过标准 |
|---|---|
| 三维 Kernel | 若涉及,必须给出 block_metadata 方案 |
| GEMM 非整除 | 已在 Tiling 维度处理 |
| L0C 溢出 | 已在内存层级维度处理 |
维度 5:循环与同步(建议级)
| 检查项 | 通过标准 |
|---|---|
| 循环结构 | §6 明确 T.Parallel / T.serial / T.Pipelined / T.Persistent 选择 |
| 同步与模式匹配 | §7 同步策略与编程模式一致 |
| 尾块处理 | §6.4 说明 shape 不整除时的尾块逻辑 |
维度 6:验证方案(阻塞级)
| 检查项 | 通过标准 |
|---|---|
| Golden 函数 | §8.1 含 PyTorch 参考实现草案 |
| L0 测试计划 | §8 含 L0 门槛测试计划:具体规则 shape(block 整除)、dtype、按算子类别的精度标准(atol/rtol) |
| 精度标准 | 按 dtype 给出 atol/rtol(fp16 默认 1e-2,fp32 默认 1e-4) |
维度 7:完整性与一致性(建议级)
| 检查项 | 通过标准 |
|---|---|
| 章节齐全 | 模板 11 章节齐全(迁移类含 §0 且 0.1–0.7 小节齐全) |
| 无占位符 | 不含 {placeholder}、TODO、待补充 |
| 同类引用真实 | §3.5.3 引用的 examples/ 路径真实存在 |
| 内部一致 | API 映射、内存规划、Tiling 三处描述相互一致,无矛盾 |
维度 8:算法优化分析(阻塞级,所有任务;可机检子集:verify_equiv.py 重跑〔等价性〕+ design_calc_check.py r3_metrics〔四口径存在性〕——机械结果与独立推演互补)⭐
检视方式:以 §1.6 为对象逐项核对,并交叉核对 §3.1 / §6 与 §1.6 的双向一致性。数学等价性由本维度独立推演核对,不轻信设计文档自述;调研结论(§1.6.0)同样由本维度独立复核——等价性推演、复杂度算术复算、负向断言对照设计 skill 的 algorithm-research.md 参考表复核。弃选/否决类论断(API 不支持 / 代价高 / 无先例)的前提同样必须亲自查证——打开其引用的 API 文档核对代价机制(如 repack 是核内 UB 级还是 GM 级),不得只复算数字而继承设计的前提。
| 检查项 | 通过标准 | 不通过示例 |
|---|---|---|
| §1.6 章节存在 | §1.6 含 1.6.0 算法调研、1.6.1 数学等价优化、1.6.2 向量化替代分析与 1.6.3 向量化轴与数据布局决策四个子节(无优化空间时 1.6.1 仍须写明结论与依据;单轴算子 1.6.3 须有豁免说明;轻量调研算子 1.6.0 四问仍须逐问有结论) | 全文无 §1.6;1.6 只有标题无分析;缺 1.6.0;多轴算子无 1.6.3 |
| 算法调研存在性与完整性 | §1.6.0 调研四问齐全:R1 等价化简公式候选表含基线候选(输入公式/源算法)且参考表命中行已评估;R2 在线算法有/无明确结论("无"须有结构依据);R3 复杂度对比表覆盖四口径(FLOPs/访存 Bytes/扫描遍数/中间缓冲峰值,基线在表,口径写清);R4 硬件亲和逐候选评估(单元匹配/容量/对齐/静态边界/流水融合/跨核);调研结论含选定算法与关键依据;「无更优替代」写明调研范围;调研深度与算子复杂度匹配(单步逐元素类四问各一行即可) | 四问缺问(如有 R1 无 R2);候选表无基线;复杂度表只比 FLOPs 无访存/遍数/缓冲;结论空白或「无更优替代」无调研范围 |
| 调研结论正确性(独立复核) | ① 等价性:选定算法/采纳候选与原语义的等价性独立推演成立(与 1.6.1 同口径,容差内等价须评估 fp16/bf16 舍入影响与数值稳定性,如 E[x²]−E[x]² 单遍式的 cancellation 风险);② 复杂度算术独立复算(FLOPs/Bytes/遍数/缓冲,与设计数字一致或差异可解释——重点核对中间缓冲是否漏计 GM 往返);③ 亲和性判断与 ascend-constraints、pattern-library 实测条目不矛盾,负向淘汰有佐证;④ 负向断言("无在线变体/无化简公式/无更低复杂度算法")主动复核:对照 tilelang-op-design skill references/algorithm-research.md §5 参考表命中行 + 源码证据(迁移任务源算法已用 online 手段却断言"无在线变体" → 矛盾)+ 同类 examples/pattern-library §4 案例,发现明显漏掉的已知候选(如归约类漏 Welford/分块合并、softmax 族漏 online 变体、attention 漏 flash 结构)→ 本行 fail;⑤ R3 并列候选(判定裕度小)不得纸面拍板,须指向 §1.6.3 布局分析或实验裁决 |
等价性推演不成立;复杂度漏算中间缓冲访存;"无在线变体"与参考表/源码证据矛盾;已知在线/化简候选被漏掉;并列候选无裁决路径直接拍板 |
| 调研→设计一致性 | §1.6.0 选定算法实际驱动 §1.4 算法描述、§3.1 公式拆解、§6 循环结构(与 1.6.1–1.6.3 同口径交叉核对);迁移任务:§0.5/§0.6 处置与调研选族一致,源算法被替换时 §0.4 优化手段的意图承接有逐项说明(静默丢弃 → fail) | §1.4/§3.1 描述的算法与 §1.6.0 选定不符(调研选 A 设计做 B);调研选定单遍算法但 §6 仍是两遍扫描结构;迁移任务源算法优化手段被替换后无承接说明 |
| 数学等价优化完整性 | §1.6.1 对**§1.6.0 选定算法**做了系统优化审视(恒等变形降代价 / 稳定化 / 公共子表达式消除 / 算子降代换 / 访存削减 / 归约合并等),采纳项有四要素「原式 → 优化后公式 → 等价性论证 → 收益量化」;无优化空间有结论与依据 | 明显可优化项未审视(如逐元素除法未考虑乘倒数);收益栏空白 |
| 等价性论证正确性 | 逐项独立推演:恒等式数学成立;容差内等价须评估 fp16/bf16 舍入影响且与 §8.2 精度标准一致 | 变形实际改变语义(如改动累加顺序/精度而无论证);等价论证为空话("显然等价") |
| 向量化替代完整性 | §1.6.2 覆盖方案中全部循环 / 标量计算点(与 §3.3 伪代码、§6 循环结构交叉核对,无遗漏);能替代的均已替代或说明取舍 | §6 仍存在逐元素标量循环而 §1.6.2 未涵盖该点;标量累加未考虑向量归约 |
| 不可替代理由充分性 | 不可替代项逐项给出充分且具体到本算子的理由(block 索引 / host 元数据 / tile 级顺序依赖 / 动态边界 / API 缺失佐证);"实现简单"、"照源码写"不构成理由 | 理由栏空白或泛泛而谈;存在向量 API 可替代却未替代且无说明 |
| 替代 API 可行性 | 替代方案 API 能在 examples/ 或 docs/Tilelang.language/ 找到佐证(与维度 1 核对口径一致),优先 v-prefix |
使用不存在的向量 API |
| 向量化轴与布局决策完整性 | §1.6.3 候选矩阵按算子类别从设计 skill 的类别候选清单枚举、类别内必选候选齐全(逐元素/广播类:广播轴×向量轴对齐;窗口/池化类:「I/O 原生布局+最内连续轴」与「核内重排布局+高整除性轴(如 C 轴)」两类必选;规约类:水平归约 vs 垂直扫描两种 lane 映射(与"选哪条轴"正交,须分别枚举)+两遍/online 交互;卷积类:直接跨步窗口/UB im2col/implicit GEMM;Cube/MixCV:fractal-NZ/load_nd2nz 即时重排 vs 显式转置/epilogue 归属侧;gather/scatter 类:连续批量 gather 粒度与向量轴对齐);逐候选有量化评分(整除性/尾 lane 浪费/累加链形态/repack 代价/UB 影响);弃选方案有量化理由,禁止"未考虑"或仅"I/O 是 NCHW 所以内部也 NCHW"式论证(I/O layout 是契约、核内布局是设计变量);迁移任务对照了源码隐式轴选择(GPU 轴是输入非结论);弃选论证前提核对:每个弃选候选的 repack/代价机制前提必须与所引 API 文档亲自核对一致(T.transpose 类重排见 docs/Tilelang.language/创建操作/T.transpose.md——核内 UB 级执行、二轴交换链、dtype 矩阵),并与 pattern-library(tilelang-op-optimize skill references/pattern-library/:layout/attention.md、traps-*.md、constants.md)已实测条目对照——负向论断(不支持/代价高/无先例)无 docs/、testing/、examples/ 或 pattern-library 实测佐证,或与文档/实测矛盾 → 本行直接 fail |
多轴算子无候选矩阵;类别内必选候选缺失(如规约类只评估了轴选择未评估水平/垂直 lane 映射);只有单一候选无豁免论证;弃选理由为空或非量化("重排有开销"无数量级);把 I/O 契约当作内部布局依据;把核内重排写成 GM 级 transpose 等与 API 文档矛盾的代价机制;负向论断与 pattern-library 实测条目矛盾或无任何佐证 |
| 实验裁决模式完整性(判定裕度依赖未实证常数时) | §1.6.3 判定若依赖未文档化/未实证常数(吞吐比/跨步访问代价/转置效率/水平归约指令效率/gather 逐元素代价等,含标注「未文档化假设」的量;pattern-library constants.md/layout.md/traps-*.md 已实测的量不算未实证——先核对设计是否漏查了 pattern-library),须有主选 + 备选 + 实验裁决计划三件套:备选方案结构完整可实现(buffer 形状/UB 预算/循环结构/转置链位置/dtype 路径/分核三要素按新任务粒度重算,达到 Stage 4 可直接实现深度——仅有弃选论证不达标);裁决计划含代表 shape、测量指标与未知常数实测/反解方法、明确判定阈值、回写路径;shape 特化工厂算子须评估按 shape 分派两方案的可行性 | 纸面单选但裕度落在未知量不确定区间内(判定依赖未实测常数却无备选);代价类论断未查 pattern-library 已有实测数据;备选只有代价论证无结构设计;无判定阈值导致 A/B 无法收敛;未评估按 shape 分派可行性 |
| 布局决策与实现一致 | §1.6.3 选定的布局/轴与 §3.3 伪代码、§4 内存规划(buffer 形状与 UB 预算)、§6 循环结构三方一致:累加循环内层向量维 = 选定轴,buffer 形状 = 选定布局;重排路径(融合转置链/host permute)在 §3.3 有对应实现 | §3.3/§6 的 buffer 布局与 1.6.3 决策矛盾;§4 UB 预算未按重排布局计算 |
| 与下游章节一致 | §3.1 公式拆解以 §1.6.1 优化后公式为输入;§6 循环结构与 §1.6.2 结论一致(判定向量化的点不得再出现对应逐元素标量循环) | §3.1 仍用优化前公式;§6 出现 §1.6.2 未论证的标量循环 |
4. 工作流程
Phase 1:读取与核对
- Read
DESIGN.md全文。 - 迁移任务(
DESIGN.md含 §0):Readsource_op_path指向的源算子代码全文;§0 与源码不一致的项在维度 0 中逐条记录证据(源码行/语句 + DESIGN.md 章节)。 - Glob 核对 §3.5.3 引用的
examples/路径是否存在。 - 必要时 Grep
tilelang/language/确认 API 是否有导出佐证(仅静态文本核对,不执行)。 - 弃选论证查证(强制):对 §1.6.1 否决项与 §1.6.3 弃选行涉及的每个 API——设计已附
docs/佐证的,亲自打开该文档核对限制条款与代价机制;未附佐证的,在docs/Tilelang.language/全部子目录(含创建操作/、索引与元素操作/、条件操作/、排序操作/、逻辑操作/、原子操作/等未映射目录)Glob/Grep 检索该 API。检索不到且设计声称"不存在"的,在维度 8 记录查证过程;检索得到但与设计论断矛盾的,维度 8 fail。另须对照 pattern-library(tilelang-op-optimizeskillreferences/pattern-library/:layout/elementwise/attention.md 模式与实测代价、traps-*.md 陷阱、constants.md 硬件常数):设计的代价类负向论断与实测条目矛盾(如"转置慢"vs 实测 µs 级、"跨步向量化无解"vs 已验证换轴模式)→ 维度 8 fail;代价类论断未引用 pattern-library 已有实测数据的,要求补证(该量已有实测则不再是"未实证假设")。 - 算法调研独立复核(强制):Read
tilelang-op-designskill 的 references/algorithm-candidates.md(R1/R2 候选表本体,条目含known_impl/kb_links实测指针),按算子族命中行核对 §1.6.0——① 候选覆盖(命中行候选是否全部评估、基线是否在表);② 负向断言("无在线变体/无化简公式/无更低复杂度算法")逐条复核(对照候选表、源码证据、同类案例);③ 复杂度表独立复算(重点:中间缓冲的 GM 往返是否漏计、口径是否自洽);④ 亲和性淘汰依据核对(与弃选论证查证同口径;容量/带宽淘汰引用 constants.md 条目);⑤ 互联网来源核对(若 §1.6.0 引用了互联网候选):来源记录(URL/论文/仓库 + 访问日期)齐全,「有候选无来源记录」按证据缺失处理(同弃选论证查证口径);不要求重新访问验证内容真实性。复核发现矛盾或漏候选 → 维度 8 fail 并附证据(候选表条目 / 源码语句 / 案例路径)。 - 机械复核(D-1/D-5,强制——可机检部分不由 LLM 复核替代):
- 重跑等价性验证(
DESIGN.md§1.6.1 含采纳优化项时):python examples/{project}/{op}/verify_equiv.py——执行结果须与 §1.6.1 内嵌结果表一致且全部EQUIV_PASS;脚本缺失、执行失败或与内嵌表不一致 → 维度 8 fail(等价性机器验证失效); - 算术复算:
python3 .agents/tools/design_calc_check.py --design <path>——逐项消费其 JSON 输出:ub/l1/l0c_budgetfail → 维度 2 fail(VP-2026-0009 混合字节口径类错误由此拦截);core_splitfail → 维度 3 fail;r3_metricsfail → 维度 8 fail;skip项(无法机械解析)转为人工复核并在维度内注明"机械跳过,人工已核"; - 两项机械结果摘要(含 skip 项)附入 REVIEW.md「机械复核」段——与维度 8 的"独立推演"互补而非替代。
- 重跑等价性验证(
Phase 2:逐维度检视
按 §3 的维度逐项检查(迁移任务 0–8,非迁移任务 1–8),每项标记 pass / warn / fail 并记录证据(DESIGN.md 章节号 + 源码证据 + 引用文件)。
Phase 3:结论判定
| 条件 | 结论 |
|---|---|
| 所有阻塞级维度均为 pass(warn 不阻塞) | 结论: 通过 |
| 任一阻塞级维度为 fail | 结论: 不通过,必须给出具体修改建议 |
Phase 4:生成 REVIEW.md
按 §5 模板写入 examples/{project}/{op}/REVIEW.md。
Phase 5:任务复盘(Retrospective,自进化钩子)⭐
REVIEW.md 结论给出后(通过与不通过均写),向 examples/{project}/{op}/RETROSPECTIVE.md 追加复盘章节(先 Read 既有内容,整文件写回,只追加不覆盖历史章节):
- 章节模板与字段规范(canonical):
tilelang-skill-evolutionskill 的 references/retrospective-schema.md。两个标准表(Skill Flow Issues / Value Point Proposals)+ Transferable Lessons 小节。 - 复盘对象是检视流程自身,不是设计内容(设计问题已随 REVIEW.md 流转给 Stage 1,不得重复抄入复盘):
- 本次检视中发现自己无法核验的点(如某 API 文档缺失、某代价机制无实测数据可对照、pattern-library 未覆盖的关键常数)→ Skill Flow Issues;
- 现有维度表无法覆盖的检查项缺口(如新的弃选论证错误形态、新的迁移源码陷阱)→ Value Point Proposals(P/R 类,target_doc 指向本 skill);
- 检视过程中亲手查证到的新 API 行为/代价实证(打开文档核对时发现的限制条款与实测矛盾)→ D 类(须带三件套)。
- 质量红线:无则如实写
none;单任务偶然现象不得写成通用规则。
5. REVIEW.md 模板
# {op} 设计文档检视报告
## 检视结论
结论: 通过
<!-- 或:结论: 不通过 -->
## 检视元信息
- 文档: examples/{project}/{op}/DESIGN.md
- 任务类型: 迁移 / 新算子开发
- 源算子: {source_op_path,仅迁移任务}
- 检视维度: {迁移任务:9 项(源算子理解与迁移分析 / API 可行性 / 内存层级 / Tiling / 技术约束 / 循环同步 / 验证方案 / 完整性 / 算法优化分析);非迁移任务:8 项}
- 阻塞级问题数: {N}
- 建议级问题数: {N}
## 机械复核(D-1/D-5)
- verify_equiv 重跑: {PASS/EQUIV_FAIL/脚本缺失/不适用(无采纳优化项)——执行结果与 §1.6.1 内嵌表一致性结论}
- design_calc_check: {逐项粘贴 JSON checks 摘要(ub/l1/l0c_budget、core_split、r3_metrics 各 pass/fail/skip + 一句 detail;skip 项注明人工复核结论)}
## 检视详情
### 0. 源算子理解与迁移分析 — pass / warn / fail / n/a
{仅迁移任务输出本节;n/a 用于非迁移任务。说明与证据须包含:语义核对结论、算法步骤覆盖核对结论、优化手段识别核对结论、耦合性判定抽检结论、重设计可行性结论、§1–§7 与迁移决策一致性结论、golden 独立性结论}
### 1. API 可行性 — pass / warn / fail
{说明与证据}
### 2. 内存层级规划 — pass / warn / fail
{说明与证据}
### 3. Tiling 策略 — pass / warn / fail
{说明与证据}
### 4. 技术约束检测 — pass / warn / fail
{说明与证据}
### 5. 循环与同步 — pass / warn / fail
{说明与证据}
### 6. 验证方案 — pass / warn / fail
{说明与证据}
### 7. 完整性与一致性 — pass / warn / fail
{说明与证据}
### 8. 算法优化分析 — pass / warn / fail
{说明与证据须包含:§1.6 章节存在性、算法调研存在性与完整性(四问覆盖、基线候选、复杂度四口径核对结论)、调研结论正确性独立复核结论(等价性推演、复杂度复算、负向断言对照参考表复核、并列候选裁决路径)、调研→设计一致性(§1.4/§3.1/§6 与选定算法、迁移任务 §0 处置一致性与优化意图承接)、数学等价优化完整性(四要素逐项核对)、等价性论证独立推演结论、向量化替代覆盖完整性(与 §3.3/§6 交叉核对)、不可替代理由充分性结论、替代 API 佐证结论、向量化轴与布局决策完整性(候选矩阵/量化评分/弃选理由核对结论)、布局决策与 §3.3/§4/§6 一致性结论、与 §3.1/§6 一致性结论}
## 检视问题列表
<!-- 仅当「结论: 不通过」时出现本章节;通过时删除本章节 -->
### 问题 1: {问题标题}
- 严重程度: 阻塞 / 建议
- 位置: DESIGN.md §{X.Y}
- 问题描述: {具体描述;迁移类问题附源码证据(源码语句/行)}
- 修改建议: {可执行的修改建议,供 Stage 1 revision 使用}
### 问题 2: ...
6. 输出规则
REVIEW.md必须写入examples/{project}/{op}/REVIEW.md。- 结论行必须是字面量
结论: 通过或结论: 不通过(conductor 据此判定路由),不得用"基本通过"、"建议通过"等模糊表述。 - 不通过时,每个阻塞级问题必须给出可执行的修改建议,作为 Stage 1
revision模式的design_error_summary输入。 - 通过时不得出现"检视问题列表"章节。
- 不得修改
DESIGN.md。
7. 错误处理
| 场景 | 处理 |
|---|---|
DESIGN.md 不存在或为空 |
结论: 不通过,问题:文档缺失 |
迁移任务但 source_op_path 缺失 / 源码不可读 |
本 Agent 交付失败,返回 fail + source_missing(不得在未读源码时放水通过维度 0) |
| 章节大面积缺失 | 结论: 不通过,逐项列出缺失章节 |
迁移任务但 DESIGN.md 缺 §0(或 0.1–0.7 小节不全) |
维度 0 fail + 维度 7 fail:迁移分析缺失/不完整 |
| 引用的 examples 路径不存在 | 标记 fail(维度 7),建议 Stage 1 修正引用或换真实参考 |
| API 无法在源码中找到佐证 | 标记 warn(若 examples 有用法)或 fail(若全无佐证) |
| 源码与 §0 解读存在多处不一致 | 维度 0 fail,逐条列出语义/算法/优化手段差异,作为修订输入 |
DESIGN.md 缺 §1.6(或 1.6.0/1.6.1/1.6.2/1.6.3 子节缺失) |
维度 8 fail:算法优化分析缺失/不完整(阻塞级),建议 Stage 1 补做 Phase 2 后重写 §1.6 |
DESIGN.md 缺 §1.6.0 或调研四问缺失 / 结论无依据 |
维度 8 fail:算法调研缺失/不完整(阻塞级),建议 Stage 1 补做 skill Phase R 后重写 §1.6.0,并同步 §1.4 与 §1.6.1–§1.6.3 |
| 调研负向断言被复核推翻(存在已知在线/化简/低复杂度候选而设计称"无",或与源码 online 证据矛盾) | 维度 8 fail:调研结论错误(阻塞级),附参考表条目/源码证据/案例路径,建议 Stage 1 重新执行 Phase R 并评估被漏掉的候选(含等价性与复杂度重算) |
| 调研选定算法与 §1.4/§3.1/§6 脱节(调研选 A 设计做 B) | 维度 8 fail:调研→设计不一致(阻塞级),建议 Stage 1 以 §1.6.0 结论为准修订 §1.4/§3.1/§6,或回退调研结论并写明依据 |
| 优化项等价性论证不成立(独立推演矛盾) | 维度 8 fail,附推演证据,建议放弃该项优化或补正论证 |
| 循环/标量点缺向量化替代分析或保留理由不充分 | 维度 8 fail,逐点列出位置(§3.3/§6)与可尝试的替代方向 |
| 多轴算子缺向量化轴/布局候选矩阵,或弃选方案无量化理由(含把 I/O 契约当内部布局依据) | 维度 8 fail:向量化轴与布局决策缺失(阻塞级),建议 Stage 1 补做 Phase 2 第 3 项后补写 §1.6.3,并同步 §3.3/§4/§6 |
弃选/否决论断前提与 API 文档矛盾(如核内重排被写成 GM 级 transpose),或负向论断(不支持/代价高/无先例)无 docs/、testing/、examples/ 佐证 |
维度 8 fail:弃选论证证据缺失/前提错误(阻塞级),附亲自打开文档核对的证据,建议 Stage 1 按设计 skill「弃选论证证据规则」重查后重写受影响候选 |
| 判定裕度依赖未实证常数却纸面单选(无备选方案结构设计与实验裁决计划),或备选仅有弃选论证、无判定阈值 | 维度 8 fail:实验裁决模式缺失(阻塞级),建议 Stage 1 按设计 skill「实验裁决模式」补齐三件套(主选+备选+裁决计划) |