跳到主要内容

18 Auto-tuning 与性能建模洞察

  • 章节编号:18
  • 所属层:C 编译与算子层(落实 16 ADR-032;支撑 17 codegen/手写模板)
  • 关联 ADR:ADR-062(调优总体策略:PGO + 分析 cost model)、ADR-063(IREE Transform tuning spec 集成)、ADR-064(搜索空间与 ISS/硅反馈)、ADR-065(与 perf-model/roofline 及 AI-Native 闭环)、ADR-066(LLM/Agent 辅助调优层)
  • 上游依赖:02(数据流/算力带宽)、03(SRAM 容量)、16(tiling/DMA/codegen)、17(手写模板上界)、Demo 02-perf-model/09-autotune

学习目标

  • 前置知识:读过 02 章(数据流/算力带宽)、03 章(SRAM 容量)与 16 章(tiling/DMA/codegen);知道「Roofline 拐点」「算术强度(arithmetic intensity)」两个基础概念;对 IREE / MLIR 的编译流程有初步印象即可。无需写过 autotune 框架的经验。
  • 学完产出:① 能画出「分析 cost model → PGO tuning spec → LLM/Agent escalation」三层调优栈,并说清各层的反馈信号(roofline / ISS timer / 硅 profiler)与触发条件;② 能用 Roofline 亲手判定一个算子到底是「访存受限(memory-bound)」还是「计算受限(compute-bound)」,并解释为什么这个判定直接决定该往哪个方向调 tile;③ 能说清「搜索空间爆炸」的量级根源,以及分析型 cost model 如何做 10–100 倍 剪枝,把搜索从「盲搜」变成「预筛后精搜」;④ 能对比「自动调优结果」与「手写 elite 模板」两种性能口径,理解 ≥95% handwritten 这条回退红线的工程含义;⑤ 能把「算子级 GFLOPS」升维到「任务级 chunk 延迟 / 有效控制频率」,说清具身场景为什么 rollout 才是最终 KPI。
  • 阅读姿势:盯住一条主线——「自动调优的本质不是把搜索跑得更快,而是把不该搜的东西提前剪掉」。无论是 Roofline 预筛、PolyBlocks 两阶段 tiling,还是 LLM Agent 生成候选,本质都在解决同一个问题:搜索空间是组合爆炸的(tile × fusion × quant × pipeline),谁能用最少的实测把「明显不可行 / 明显次优」的配置剔除,谁就赢。

1. 范围与目标

本章定义 tile/并行/DMA 等编译参数如何自动搜索,以及 分析性 cost model / roofline 如何减少搜索空间、支撑编译兼容(07)跨代适配。与 16 章 codegen 分工:16 生成候选代码,18 选最优参数。

核心问题

  1. 静态启发式 vs Profile-Guided vs 搜索/RL 如何组合?
  2. 如何对接 IREE tuning spec(Transform dialect)?
  3. TOP 编译栈(PolyBlocks、XLA、昇腾 AOE)的 autotune 做法?
  4. 反馈信号来自 ISS / cycle-approx / 硅 的哪一级?
  5. Demo 09-autotune02-perf-model 如何贯通?
  6. 任务级调优(rollout ms/Hz/chunk)如何纳入,而非仅算子 GFLOPS?
  7. LLM/Agent 辅助调优与 IREE PGO 如何分层(衔接 15 ADR-033)?

2. 需求洞察(具身驱动)

2.1 调优对象(点名)

对象参数示例来源模型
GEMM/FCtile M/N/K;parallel;vector width全 VLA
MHA/KVhead tile;KV block;fusionOpenVLA/π0
Conv/ViTspatial tile;winograd感知前端
DMA double-bufferstage depth;slice size08/16 章
流匹配 loopunroll vs loop;step fusion;1-NFE 快路径21 章
RTC 双缓冲chunk overlap;inpainting 开销21 章 π0
量化+tile 联合INT4 block + tile M/N(19 章)GR00T nvfp4
多模型 VMcontext 分区;DiT vs VLM specGR00T/Gemini

2.2 硬性指标

  • batch=1 小 GEMM:autotune 须覆盖 M/N/K ≤256 常见具身 shape。
  • 搜索:ISS 上 ≤分钟级/算子;硅后 ≤小时级/模型。
  • 相对手写 elite(17):autotune 结果 ≥95% 性能或触发手写路径。
  • 任务级:OpenVLA/π0 chunk latency ≤100ms≥10Hz 有效控制频率(对标 GR00T Thor 92ms);rollout 成功率不降。
  • tuning spec 绑定 LeRobot/model manifest 的 shape、quant、n_action_steps(21 ADR-046)。
  • 编译兼容:新芯片代际 重跑 tuning spec,非改源码。

3. 技术现状与趋势(点名 + 来源)

3.1 调优方法论光谱

方法描述代表
分析 cost model屋顶线/带宽-算力闭式估计PolyBlocks;roofline
静态启发式目标配置默认 tileIREE default tuning specs
Profile-Guided(PGO)跑 benchmark 选最优 #compilation_infoIREE tuning spec
自动搜索网格/贝叶斯/进化AutoTVM;Ansor
RL/Agent学习 pass/tile 序列MLIR RL(2024);KernelAgent(15)

3.2 TOP 级 AI 推理芯片 Auto-tune 方案横向对比

公司/栈调优机制反馈信号具身相关优势劣势
IREETransform dialect tuning spec;PGO dispatch benchmark;--iree-codegen-tuning-spec-path真实硬件 timingSDXL 等已验证;DSA 待建与 15/16 同源;spec 可版本化DSA backend 需自研 spec
PolyBlocks200+ pass + 分析 cost model;两阶段 tiling;无 vendor lib分析+JIT 实测通用 DL;可移植新 chip分析驱动,搜索少非 IREE 树内
Google XLA启发式+fusion cost;AutoJITTPU profiler云为主成熟封闭
华为 AOEAOE 调优引擎(OPAT/SGAT/GDAT/AMCT)昇腾 profilerCANN 一体软硬一体绑昇腾
TVM/AnsorAutoTVM/MetaSchedule硬件 timerBYOC 常用搜索强与 IREE 分叉
NVIDIA TensorRTBuilder layer fusion/precision/tactic 搜索GPU timerGR00T engine build(49ms DiT)极致;闭源黑盒不可复现;与 MLIR 分叉
cutlass/autotune 文化手工+模板枚举nvprofGPU性能顶不可直接搬 DSA
MLIR RL(研究)RL 选 Linalg tile/fusion 序编译+运行 reward具身长尾探索性强量产成熟度低
我们(目标)IREE spec + roofline 预筛 + ISS 反馈ISS→FPGA→硅π0/OpenVLA P0 ops仿真阶梯从零建 DSA spec

3.3 IREE Tuning 工作流(2025–2026,重点)

IREE Issue #16952 已落地 v0 基础设施。

  1. 编译带 instrumentation → 运行 trace → 定位 root ops(matmul/conv)。
  2. 生成 Transform dialect spec(tuning_spec_entrypoint)→ 注入 #iree_codegen.compilation_info(tile、pipeline、MMA schedule)。
  3. Flags:--iree-codegen-tuning-spec-path;--iree-codegen-enable-default-tuning-specs
  4. CPU 路径已 plumbing(LLVMCPU matmul spec);GPU/DSA 需扩展

判断:扩展阶段 在 IREE 上调通 DSA tuning spec 架构;具身 shape 集来自 21 章 model manifest

与 TensorRT Builder 对比(GR00T 参考)

维度TensorRT BuilderIREE tuning spec(我们)
搜索对象fusion、tactic、precisionTransform tile/pipeline/DMA
反馈GPU timerISS→硅;+ rollout ms
可版本化engine blob opaquespec 文本+git
任务目标layer latencyE2E chunk + Hz
AI 辅助内部启发式LLM 生成 spec 候选(3.7)

TRT 的 precision 搜索(nvfp4/fp8) 启示:19 章 quant 与 18 章 tile 联合搜索,非两阶段割裂。

3.4 任务级调优(E2E,非仅 kernel)

层级优化变量反馈信号工具
算子tile/fusionISS timer / roofline09-autotune
子图loop unroll;1-NFE 切换subgraph msIREE benchmark
任务chunk_size;n_action_steps;RTC overlaprollout Hz + p99 ms21 章验收集
多模型context 分区;DiT vs VLM spec并发 latency09 MIG + 12 VM

RTC(21 章)调优要点:chunk 双缓冲使 有效频率 > 1/chunk_ms;autotune 目标函数加 overlap 项,避免仅优化单次 forward 而忽略 pipeline bubble。

Flow-loop 调优:5 步 vs 4 步(GR00T) vs 1-NFE(OFP) —— spec 库须 三套 dispatch;manifest 字段 flow_steps 驱动选择。

3.5 分析 Cost Model / Roofline(衔接 Demo 02-perf-model)

层级输入输出
RooflineDSA 峰值 TOPS、LPDDR/SRAM 带宽(03)compute-bound vs memory-bound
DMA modelscratchpad 容量(03);double-buffer最小 tile 下界
Latency model队列深度;launch overhead(09)剔除不可行 config
预筛上面三者搜索空间 10–100× 缩小

PolyBlocks 经验:先 tile 目的地 nest 再 fusion(arXiv:2603.06731,编号待核)——与 16 章 two-phase 一致,可写入 heuristic。

搜索空间「预筛漏斗」直观图——下图把「组合爆炸的原始搜索空间」如何被 roofline / DMA / latency 三级分析模型逐层剪枝,最终只剩少量候选进 ISS 实测,画成一个漏斗:

读这张漏斗:关键不在漏斗末端的 ISS 实测跑得多快,而在于前三级分析模型(免费、闭式估算)在不跑一次真实 kernel 的前提下,就把 90%–99% 的配置判死。这正是「startup 算力有限却仍能做 autotune」的根本原因——用分析型 cost model 换实测预算,而非堆机器盲搜。

3.6 量化与 tile 联合调优(衔接 19 章)

联合变量搜索策略参考
INT4 block size × GEMM tileroofline 预筛 + PGOQVLA;GR00T nvfp4
fp8 ViT conv tile带宽 bound 优先GR00T ViT fp8
per-channel scale 布局与 DMA 对齐19 ADR-042

禁止先定 quant 再 blind tile 或反之;manifest 中 quant_scheme + preferred_tiles 一并版本化。

3.7 LLM/Agent 辅助 Auto-tuning(2024–2026 业界,重点)

LLM 不替代 IREE PGO 与 roofline 主线,而是 加速 spec 候选生成、缩小搜索、消化长尾——与 15 章 ADR-033 一致。

3.7.1 业界方案谱系

系统机构核心机制反馈信号与我们的映射
KernelAgentPyTorch多 Agent:Profile→诊断→Prescribe→并行 worker 优化 Triton硬件 profiler(Nsight 类);H100 89% roofline对标:ISS/硅 profiler → Agent 改 intrinsics 模板(17)
KernelFalconPyTorchDeep agent 分层分解;并行 Triton 生成+早停;250 KernelBench 100% 正确执行验证(语法/编译/数值)对标:并行 spec 候选 + ISS 数值 harness
CUDA Agent研究Agentic RL;KernelBench L1–L3 超 torch.compileRL reward远期 DSA 专用 Agent 模型(15 章)
AutoKernelRightNow-AIAmdahl 排序瓶颈 + edit-benchmark-keep/revert 循环;Triton/CUDA 双后端;六层 playbook五阶段 correctness harness对标:OpenVLA/π0 子图 profiling → 优先调 top 算子
KernelEvolveMeta图搜索 + RAG 硬件约束;Triton/CuTe/TLX;异构 acceleratorfitness + 持久 KB对标:DSA spec RAG(ISA+历史 spec)
GPU Kernel Scientist研究LLM 进化式迭代;仅 timing 反馈;AMD MI300 HIP外部 evaluator timing对标:ISS/cycle-approx timing-only 闭环
Reasoning Compiler研究LLM + MCTS 选 pass/tile 序列;上下文感知 mutationrollout 性能对标:LLM 提议 Transform 序列 + MCTS/贝叶斯精搜
Xe-ForgeIntel多阶段 LLM pipeline;shape-aware tile;GRF 约束;autotune grid ≤12硬件 query + JIT对标:roofline+SRAM 容量约束 → LLM 生成初始 grid
mlirAgentUCBIR fingerprint + KG;LLM 不能替代 pass(Gemini 11.9% 低于 identity);evolve inliningbinary size / 预测 pass对标:LLM 辅助 pass 开发,非 runtime autotune 主路径
MLIR RL研究RL 选 Linalg tile/fusion 序compile+run reward研究轨;补充 PGO

3.7.2 共性范式(2025–2026 共识)

Profile(真实硬件) → 瓶颈排序(Amdahl) → LLM/Agent 生成候选(spec/kernel)
→ 执行验证(数值+性能) → keep/revert → 沉淀 spec 库
  1. Grounding 必需:KernelAgent/AutoKernel 均强调 profiler 信号,非纯 LLM 臆测;我们 ground 在 ISS→FPGA→硅
  2. 正确性 harness 先于性能:KernelFalcon 五阶段验证;我们 lit + golden + rollout 三级。
  3. LLM 擅长候选,不擅长替代编译器:mlirAgent 证明 direct IR transform 失败;我们让 LLM 写 tuning spec / Transform 序列,由 IREE 执行。
  4. 并行探索 + 早停:KernelFalcon/KernelAgent worker pool → 09-autotune 多 spec 并行 ISS 跑
  5. Playbook/RAG 降搜索:AutoKernel 909 行 program.md;我们维护 具身 tuning playbook(小 batch GEMM、flow loop、INT4 联合)。

3.7.3 三层架构(我们的 LLM-Native autotune)

职责技术
L0 默认roofline + PolyBlocks heuristic + IREE default spec无 LLM
L1 PGOISS/硅 benchmark 选最优 #compilation_infoIREE tuning spec(ADR-063)
L2 AgentLLM 生成/变异 spec;MCTS/并行 worker;Amdahl 优先级ADR-066;15 ADR-033

L2 触发条件:L1 未达 95% handwritten任务级 chunk ms 超标;或新 manifest 算子长尾。

L2 输出:经 ISS 验证的 spec PR 入 git; runtime 在线 LLM 推理。

3.7.4 具身场景 LLM-tuning 特殊约束

约束含义
batch=1 主导playbook 须覆盖 M/N/K≤256;LLM 勿照搬 GPU 大 tile
rollout 为准reward = chunk_ms + 成功率,非 TFLOPS
RTC overlap调优含 双缓冲深度;见 3.4
manifest 绑定spec 版本 ↔ LeRobot model_id + quant + flow_steps
多模型 MIGGR00T VLM+DiT 独立 spec 集;并发时 QoS 入 cost model

3.7.5 与 15/17 章分工

  • 15 章:LLMMLIR pass 样板 + Agent CI。
  • 17 章:Agent 生成 intrinsics 手写模板 候选。
  • 18 章:Agent 生成/变异 tuning spec + 任务级搜索 orchestration。

3.8 智能化调优闭环(落实 ADR-066)

  • Regression basket:OpenVLA + π0 + Diffusion Policy 子图;GR00T 式 DiT 4-step shape。
  • Internal KernelBench 式集:从 21 章 P0 算子抽取 50–100 dispatch
  • Telemetry 回写:29 章硅后数据 → 触发 L2 Agent 重调。

3.9 趋势

  1. PGO tuning spec 取代纯 Ansor 式盲搜(IREE 方向)——更可维护、可版本化。
  2. 分析 model + 小范围搜索 混合(PolyBlocks)——适合 startup 算力。
  3. RL 用于长尾,非替代 baseline heuristic(MLIR RL 论文结论)。
  4. LLM Agent 成为调优加速器(2025–2026):KernelAgent/AutoKernel/Reasoning Compiler 证明 profiler-grounded 闭环 可超纯启发式;我们 L0/L1 量产 + L2 Agent 研发
  5. 任务级 E2E 调优 与算子调优 同等优先级——对标 GR00T Thor 92ms/10.9Hz
  6. Quant+tile 联合搜索 对标 TRT Builder precision tactic,但 spec 可审计

3b. 由演进反推的诉求

演进Autotune 响应
INT4/NVFP4(19)quant tile 搜索空间
1-NFE 动作头(21)loop unroll 参数降维
新 ISA 代际(07)重跑 spec;模板参数化
多 chiplet(04)跨 die bandwidth 入 model

4. 候选方案与对比矩阵

候选性能成本风险可驾驭度小结
A. IREE tuning spec(PGO)+ roofline 预筛5434建议方案(主线)
B. 纯 AutoTVM/MetaSchedule4343与 IREE 分叉
C. 纯分析 model(PolyBlocks 式)4534作预筛/默认
D. RL 全自动3252研究轨
E. LLM Agent spec 生成(L2)4333ADR-066;补 L1 长尾

倾向:A+C 量产默认;E 作 L2 escalation;D 作 30 章 AI-Native 实验。


5. 关键权衡、风险与依赖

  • 搜索时间 vs 覆盖:ISS 快但不准 cycle;硅后准但贵 —— 阶梯反馈(仿真规划)
  • 过拟合单模型:OpenVLA 调优未必泛化 π0 —— 多模型 regression basket + manifest 驱动 spec。
  • LLM 幻觉 spec:须 ISS 数值 harness 门禁;禁止未验证 spec 入量产(L2→L1 晋升流程)。
  • RTC 忽略:仅优化单次 forward → pipeline bubble —— 任务级目标函数(3.4)
  • 与 17 手写:autotune 未达 95% → 回退手写模板
  • Demo 09-autotune:网格搜索 stub → 接 02-perf-model + ISS timer。

6. 结论与待决项

6.1 初步结论

  1. 主线:IREE Transform tuning spec(PGO)+ roofline/分析预筛(16 ADR-032 落实)。
  2. 反馈阶梯:ISS(默认)→ cycle-approx → 硅;与生命周期 P6 War Room 一致。
  3. 具身 shape 库:tiny-gemm + OpenVLA/π0/GR00T DiT 抽取 dispatch;绑定 model manifest
  4. PolyBlocks 两阶段 tiling heuristic 吸收为默认 spec,再 PGO 微调。
  5. 任务级调优:chunk ms、Hz、RTC overlap、rollout 成功率 —— 与算子 TFLOPS 并列 KPI
  6. Quant+tile 联合搜索(19 章);对标 TRT Builder,输出 可 git 版本化 spec
  7. LLM-Native L2 层(ADR-066):KernelAgent/AutoKernel/Reasoning Compiler 范式 —— profiler-grounded spec 生成+并行 ISS 验证;量产仍 L0/L1。
  8. 多模型 MIG 式独立 spec(VLM vs DiT);并发 QoS 入 cost model(09/12)。

6.2 待决项

  • DSA tuning spec 第一版覆盖:仅 GEMM vs 含 conv/attention。
  • L2 Agent 框架:自研 vs 复用 OpenHands/CI 模板(30 章)。
  • cycle-approx 何时纳入搜索反馈(M2 vs M4)。

6.3 ADR 候选

  • ADR-062 调优策略:L0 分析 cost model + L1 IREE PGO tuning spec;禁止量产依赖纯盲搜;RL 仅研究;L2 LLM Agent 作 escalation(ADR-066)
  • ADR-063 IREE tuning spec:实现 DSA backend 的 Transform spec 管线;版本化 spec 仓库;与 model manifest 字段绑定;flags 与 CI 集成(10-devinfra)。
  • ADR-064 搜索空间与反馈:shape 库来自 21 章;搜索在 ISS 完成初筛;≥95% handwritten 否则 escalate L2;batch=1 小 shape 必覆盖;任务级 chunk ms/Hz 入 benchmark。
  • ADR-065 perf-model 闭环:02-perf-model roofline 驱动预筛;09-autotune 接 ISS;telemetry 回写 spec(29 章);quant+tile 联合 与 19 章一体。
  • ADR-066 LLM/Agent 辅助调优层:L2 Agent 生成/变异 tuning spec(非 runtime LLM);Amdahl 瓶颈排序;并行 ISS worker + keep/revert;playbook+RAG(ISA+历史 spec);输出 git spec PR;ground 在 ISS/硅 profiler;衔接 15 ADR-033。

深入思考

下面三题每题先给题干,再用 <details> 折叠一份图文并茂的参考答案。建议先合上答案自己想 3 分钟,再展开对照。

思考题 1:Roofline 如何判定算子是访存受限还是计算受限

给你一个 batch=1 的具身小 GEMM:M=1, N=256, K=256(π0 动作专家的一个投影层),跑在一颗峰值 256 TOPS(INT8)、片外 LPDDR 带宽 68 GB/s 的 DSA 上。结合 3.5 节的 Roofline,亲手算出它的算术强度、判定它是访存受限还是计算受限,并解释这个判定为什么直接决定 autotune 该往「加大 tile 提高复用」还是「提高并行度堆算力」哪个方向调。

展开参考答案(含 Roofline 拐点判定图 + 算一遍)

结论:这个 batch=1 小 GEMM 的算术强度远低于硬件拐点,属于典型的访存受限算子——调优方向必须是「减少访存 / 提高数据复用」(融合、片上驻留、加大 K 方向复用),而不是堆更多算力单元,因为算力根本喂不满。

用具体数字算一遍(M=1, N=256, K=256,INT8,权重 K×N 需从片外读):

  1. 计算量:GEMM 的 FLOPs ≈ 2 × M × N × K = 2 × 1 × 256 × 256 ≈ 131072 FLOPs ≈ 0.131 MFLOP
  2. 访存量:主导项是读权重矩阵 K × N = 256 × 256 = 65536 个 INT8 元素 ≈ 65536 字节(激活 M×K=256 字节、输出 M×N=256 字节相对可忽略)。
  3. 算术强度 I = FLOPs / Bytes ≈ 131072 / 65536 ≈ 2 FLOP/Byte
  4. 硬件拐点 I_ridge = 峰值算力 / 峰值带宽 = 256e12 / 68e9 ≈ 3765 FLOP/Byte
  5. 判定:I ≈ 2 远远小于 I_ridge ≈ 3765——深陷访存受限的斜坡区,实际可达算力被带宽死死卡住(粗算上限 ≈ 2 × 68 GB/s = 136 GFLOPS,不到峰值 256 TOPS 的千分之一)。

为什么决定调优方向:既然瓶颈是「权重搬运」而非「乘加算力」,autotune 就绝不能去堆更大的并行 tile 妄图跑满算力单元——算力本来就闲着。正确方向是:① 把权重尽量驻留片上 SRAM、跨多次 forward 复用(具身 batch=1、同一权重反复用);② 与相邻算子融合(如 GEMM+bias+激活合并),摊薄搬运;③ 用 INT4/NVFP4 进一步压缩权重字节数(19 章联合),直接把算术强度往右推。这就是为什么「Roofline 判定」是 autotune 的第一道预筛(3.5 漏斗第一级)——判错方向,后面搜得再快都是南辕北辙。

回链:详见 3.5 节 Roofline / DMA / Latency 三级预筛与漏斗图,以及 3.6 节 quant+tile 联合搜索。

思考题 2:搜索空间爆炸如何用成本模型剪枝

一个算子的 autotune 变量有:tile M/N/K(各 8 档)、并行度(4 档)、vector width(3 档)、DMA stage depth(3 档)、fusion 开关(2 档)。结合 3.5 节的分析 cost model3.7 节的共性范式,先算出朴素笛卡尔积的规模,再论证 roofline / SRAM 容量约束如何把它剪到「ISS 分钟级」可承受的范围,并说明为什么「先分析剪枝、再实测精搜」比「纯 Ansor 式盲搜」更适合 startup。

展开参考答案(含搜索空间剪枝对比 + 算一遍)

结论:朴素笛卡尔积轻松上万,若每个配置都真跑一次 ISS(哪怕秒级)就是数小时级、不可承受;而 roofline + SRAM 容量这类免费的闭式约束,能在不跑任何 kernel 的前提下先砍掉 90%–99% 明显不可行的配置,把实测预算集中在几十个候选上——这就是「预筛后精搜」相对「盲搜」的核心优势。

用具体数字算一遍:

  1. 朴素笛卡尔积 = M(8) × N(8) × K(8) × 并行(4) × vector(3) × DMA stage(3) × fusion(2) = 8·8·8·4·3·3·2 = 13824 个配置。
  2. 若纯盲搜:每配置 ISS 实测哪怕 1 秒,13824 秒 ≈ 3.8 小时;换 cycle-approx 或硅后,单配置几十秒 → 数天。对 startup 单模型单算子完全不可接受(2.2 节要求「ISS 上 ≤ 分钟级 / 算子」)。
  3. Roofline 剪枝:访存受限算子(见思考题 1)下,大 tile 塞不满算力还徒增 SRAM 占用,一次性剔除掉「明显跑不满 / 明显浪费带宽」的 tile 组合——通常砍掉一个数量级。
  4. SRAM 容量约束:03 章的 scratchpad 容量给出「tile × stage depth」的硬上界,tile M×K + tile K×N + double-buffer 超容量的配置直接非法,又砍掉一大批(尤其大 tile × 深 stage 的组合)。
  5. 结果:两级闭式约束叠加,13824 → 几十~一两百,量级正好是 3.5 节说的「10–100× 缩小」;剩下的才丢进 ISS timer 做 PGO 精搜,分钟级搞定。

为什么更适合 startup:纯 Ansor/AutoTVM 盲搜依赖海量实测采样喂给学习型 cost model,对算力和数据量都是重资产;而 PolyBlocks 式分析驱动(3.9 趋势 2)几乎不花实测预算就完成主剪枝,把稀缺的 ISS/硅时间用在刀刃上。这也是 3.7.5 节让 LLM Agent 只负责「生成候选 spec」、由 IREE 执行验证的原因——LLM 也是一种「便宜的候选生成器 + 分析先验」,同样服务于「少实测、多剪枝」这条主线。

回链:详见 3.5 节预筛漏斗、3.9 节趋势 1/2,以及第 4 节候选矩阵中「A(IREE PGO)+ C(PolyBlocks 分析预筛)」为量产默认的取舍。

思考题 3:自动调优 vs 手写性能口径

autotune 跑出来的 GEMM 达到手写 elite 模板(17 章)的 92%,团队争论:是接受还是回退手写?结合 2.2 节的 ≥95% 红线3.4 节的任务级调优,分析「算子级 GFLOPS 口径」和「任务级 chunk 延迟 / 有效频率口径」为什么可能给出相反结论,以及你会如何设计这条「95% 否则回退 / escalate L2」的决策流程。

展开参考答案(含两种性能口径对比表 + 决策图)

结论:算子级 GFLOPS 只是手段,任务级 chunk 延迟 / 有效控制频率才是具身场景的最终裁判;单看算子 92% 可能触发回退,但若该算子不在关键路径、任务级 chunk ms 与 Hz 都达标,则应接受 autotune 结果而非盲目回退手写——决策必须由「任务级目标函数」而非「单算子 TFLOPS」拍板。

两种性能口径对比:

维度算子级 GFLOPS 口径任务级 chunk / Hz 口径
测什么单个 kernel 的峰值利用率(vs 手写 elite)E2E 一次 chunk 的延迟、有效控制频率、rollout 成功率
红线≥95% handwritten,否则 escalate/回退(2.2)chunk ≤100ms & ≥10Hz(对标 GR00T Thor 92ms),成功率不降
盲点忽略算子在关键路径上的占比、忽略 pipeline bubble单看总时可能掩盖某个算子严重低效
何时主导瓶颈算子、需与 17 章手写对标时最终验收、RTC 双缓冲 overlap、多模型并发时
相反结论来源92% < 95% → 判「不达标,回退」若该算子非瓶颈 / overlap 掩盖 → 判「任务达标,接受」

决策流程设计:① 先用 Amdahl 瓶颈排序(3.7.2)看该算子在 chunk 里的耗时占比——非关键路径的 92% 直接接受;② 是关键路径,再看任务级 chunk ms / Hz(3.4)是否达标——RTC 双缓冲的 overlap 常能把单算子的 8% 差距在 pipeline 里吸收掉,达标即接受;③ 只有「既是瓶颈、任务级又超标、且 < 95% 红线」三者同时成立,才 escalate 到 L2 Agent(3.7.3)重调,或回退 17 章手写模板。核心是别用算子级口径去否决任务级已经达标的结果,也别用任务级达标去掩盖关键路径上的严重低效——两个口径互为校验,任务级拥有最终裁量权(3.9 趋势 5:任务级与算子级同等优先级)。

回链:详见 2.2 节硬性指标(≥95% 与 chunk ≤100ms 双红线)、3.4 节任务级调优四层级,以及第 5 节「与 17 手写:autotune 未达 95% → 回退手写模板」的风险条目。


7. 端→边→中心演进影响

  • 边/中心:更大 tile、更高 batch 的 独立 spec 变体;同一 tooling。
  • 不可逆点:tuning spec 与 ISA tile 约束绑定 —— 模板参数化,非 magic number。

附:信息来源

区分公开/估计;参考时间 2026-06。

  • IREE tuning infrastructure:github.com/iree-org/iree#16952;iree.dev/reference/tuning/;LLVMCPU tuning spec commit dcde0c7。[公开]
  • MLIR RL for Linalg:arXiv:2409.11068。[公开]
  • KernelAgent / KernelFalcon:PyTorch blog 2025–2026;KernelBench 250 题。[公开]
  • AutoKernel:arXiv:2603.21331(编号待核);github.com/RightNow-AI/autokernel。[公开]
  • KernelEvolve(Meta):arXiv:2512.23236(编号待核)。[公开]
  • GPU Kernel Scientist:arXiv:2506.20807。[公开]
  • Reasoning Compiler(LLM+MCTS):arXiv:2506.01374;github.com/Anna-Bele/LLM_MCTS_Search。[公开]
  • Xe-Forge(Intel GPU):arXiv:2605.26118(编号待核)。[公开]
  • mlirAgent(UCB):github.com/ucb-bar/mlirAgent。[公开]
  • CUDA Agent / KernelBench:Stanford KernelBench;agentic RL 报道 2025。[公开]
  • NVIDIA TensorRT GR00T Builder:Isaac GR00T optimization docs。[公开]
  • PolyBlocks:arXiv:2603.06731(编号待核);docs.polymagelabs.com;16 章引用。[公开]
  • 华为 AOE:CANN 文档 Ascend Optimization Engine。[公开]
  • Demo 02-perf-model/09-autotune;16 ADR-032;17 ADR-057。[内部/公开]