编译器

0 阅读2分钟

编译器地基的五篇论文全部实测

五篇论文、一次沙箱实测、1.6x / 1.77x / 5.07x 三组数字,脚本全部开源。这是目录篇。

五篇论文按「人的工作如何一步步退出」——按同一套骨架:30 秒版 → 坑在哪 → 一张表看懂改动 → 实用点速查 → 实战数字 → 动手路线。

一、五篇论文,一条主线

#论文出处回答的问题一句话遗产
1HalidePLDI 2013高性能代码怎么写快算法/调度分离
2TVMOSDI 2018多硬件怎么自动编译两级编译 + ML 搜调度
3AnsorOSDI 2020连模板怎么去掉sketch+annotation 全自动
4TritonMAPL 2019单算子怎么手搓省力块级编程,无并发原语
5MLIRCGO 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.tirtvm.s_tirget_blockget_sblock、target 要 JSON 字典),网上旧教程全过时。

③ Ansor:全自动调优 → 5.07x

人只给计算定义,meta_schedule 8 trials 自动搜索,朴素 10.5ms → 自动搜出 2.1ms。写算法的人,不用懂调度。

没跑成的两篇也如实报告:Triton 需要 NVIDIA GPU;MLIR 需要 LLVM 工具链——两篇的作业和本机跑法写进了后续篇。

三、这套学习方法的三个零件

  1. 信号打捞:grep 论文里作者认错的指纹词(unstable / requires careful / conflict…),选题是机械动作,不是灵光一闪。
  2. 九问问卷:同类论文先填表(学什么/恒等式/坑/交付),再标它拧了哪几个旋钮。
  3. 30 秒酒馆测试:一句话复述不出来,就不可能让别人记住。

四、专栏目录

  1. 本篇总纲
  2. Halide:算法写一遍,调度随便换
  3. TVM:cuDNN 追不上新硬件
  4. Ansor:删掉 1.5 万行调度模板
  5. Triton:把线程从语言里删掉
  6. MLIR:LLVM 之父的第二次革命
  7. TVM 0.26 API 踩坑实录(附实测脚本)

下一篇:《算法写一遍,调度随便换:Halide 为什么快》