编译器地基的五篇论文全部实测
五篇论文、一次沙箱实测、1.6x / 1.77x / 5.07x 三组数字,脚本全部开源。这是目录篇。
五篇论文按「人的工作如何一步步退出」——按同一套骨架:30 秒版 → 坑在哪 → 一张表看懂改动 → 实用点速查 → 实战数字 → 动手路线。
一、五篇论文,一条主线
| # | 论文 | 出处 | 回答的问题 | 一句话遗产 |
|---|---|---|---|---|
| 1 | Halide | PLDI 2013 | 高性能代码怎么写快 | 算法/调度分离 |
| 2 | TVM | OSDI 2018 | 多硬件怎么自动编译 | 两级编译 + ML 搜调度 |
| 3 | Ansor | OSDI 2020 | 连模板怎么去掉 | sketch+annotation 全自动 |
| 4 | Triton | MAPL 2019 | 单算子怎么手搓省力 | 块级编程,无并发原语 |
| 5 | MLIR | CGO 2021 | 编译器本身怎么造 | 一切皆 Op,方言拼装 |
演化逻辑一句话:人的工作从「写调度」退到「写模板」再退到「零」——每一次后退,性能反而更好。
前三篇是自动调度主线;Triton 是平行线;MLIR 升一层,回答「编译器本身怎么造」。
二、三次实测:每篇的承诺我都亲手验过
① Halide:同一算法三种调度 → 1.6x
4 层级联 3×3 blur,1024×1024 float32 单线程:全 inline 6.1ms / 全 compute_root 3.8ms / compute_at 逐层流水 3.7ms。算法一个字没动。
诚实备注:inline 版有 3⁴=81 倍重算却只慢 1.6x——编译器的矢量化救了它,这本身就是「调度信息足以让编译器自动优化」的证据。
② TVM:conv2d 朴素 vs 矢量化 → 1.77x
199.4ms → 112.4ms(llvm CPU)。注意 TVM 0.26 API 大改(tvm.tir→tvm.s_tir、get_block→get_sblock、target 要 JSON 字典),网上旧教程全过时。
③ Ansor:全自动调优 → 5.07x
人只给计算定义,meta_schedule 8 trials 自动搜索,朴素 10.5ms → 自动搜出 2.1ms。写算法的人,不用懂调度。
没跑成的两篇也如实报告:Triton 需要 NVIDIA GPU;MLIR 需要 LLVM 工具链——两篇的作业和本机跑法写进了后续篇。
三、这套学习方法的三个零件
- 信号打捞:grep 论文里作者认错的指纹词(unstable / requires careful / conflict…),选题是机械动作,不是灵光一闪。
- 九问问卷:同类论文先填表(学什么/恒等式/坑/交付),再标它拧了哪几个旋钮。
- 30 秒酒馆测试:一句话复述不出来,就不可能让别人记住。
四、专栏目录
- 本篇总纲
- Halide:算法写一遍,调度随便换
- TVM:cuDNN 追不上新硬件
- Ansor:删掉 1.5 万行调度模板
- Triton:把线程从语言里删掉
- MLIR:LLVM 之父的第二次革命
- TVM 0.26 API 踩坑实录(附实测脚本)
下一篇:《算法写一遍,调度随便换:Halide 为什么快》