TileLang 是什么:以 Tile 为单位编写 AI 算子
读 TileLang 源码:GEMM 如何变成一次编译调用
从公开示例与 JIT 入口建立可复查的代码路径
读 TileLang 源码:GEMM 如何变成一次编译调用知识学习CN编辑简报更新 2026-10-04
你将学会
- 先看示例
- 看 Python 入口
- 把调试接回源码
开始前需要
- 一个目标算子与设备
- 正确的框架参考实现
- 兼容的编译器与运行时
从 README 示例走向真实模型瓶颈的证据
先看结论
- 编译期块大小会影响特化。
- JIT 装饰器涉及真实编译行为。
- 这不是全编译器审计。
先看示例
GEMM 说明解释分块选择和变体。先对照快速示例里的 `T.Pipelined` 搬运、`T.gemm` 累加与 ReLU 收尾,再深入更复杂的示例。
标出哪些是运行时张量,哪些是编译期块大小。后者变化可能产生新的特化,在性能记录里必须体现。
看 Python 入口
包的 `__init__.py` 暴露公开 API,JIT 模块负责面向编译的包装。不要在读之前就把装饰器当成纯语法糖。
目标选择之后还会进入更深的编译器路径,但本系列只捕获了选定入口文件,不假装完成了 TVM pass 与设备代码的逐行审计。
把调试接回源码
调试指南介绍中间 IR 和编译诊断。内核失败时,先保存源码、形状、目标与相关中间产物,再考虑改分块参数。
这条固定版本阅读路径帮助学习者定位代码,但我们没有执行编译轨迹,也不能证明某个内核最优。
如何选择
| 比较维度 | 方案 A | 方案 B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
实施步骤
- 1
先读 README 小 GEMM,再看复杂变体。
- 2
追踪公开导入、JIT 包装与目标选择。
- 3
保存源码、形状和 IR 证据。
可复制示例
text
README matmul_relu -> tilelang 公开 API -> JIT 包装
形状 + 块大小 + 目标 -> 编译特化常见问题
读代码从哪里开始?
先看 README 示例,再读 `tilelang/__init__.py` 和 `tilelang/jit/__init__.py`。
检查过生成的设备汇编吗?
没有;本轮停留在固定的 Python 入口与文档。
资料来源
- TileLang / README.md来源核查 2026-10-04
- TileLang / examples/gemm/README.md来源核查 2026-10-04
- TileLang / tilelang/jit/__init__.py来源核查 2026-10-04
- TileLang / tilelang/__init__.py来源核查 2026-10-04
- TileLang / docs/tutorials/debug_tools_for_tilelang.md来源核查 2026-10-04