2026 年 5 月 Triton 社区例会纪要:TileLens 可视化分析、Windows 插件扩展与 Block Pointer 去留之争
【免费下载链接】tritonDevelopment repository for the Triton language and compiler项目地址: https://gitcode.com/GitHub_Trending/tri/triton
本次例会纪要覆盖 Triton 社区在 2026 年 5 月的三场核心讨论:乔治梅森大学的 TileLens 项目(面向 tile 编程模型的通用可视化程序分析工具)、Intel 工程师在 Windows 平台移植 Triton 插件扩展的调研结论,以及社区围绕 block pointer 弃用、TMA 命名与 Triton 发布节奏的公开问答。读者可以借此了解 Triton 生态在可观测性工具链、跨平台 ABI 与语言演进三个方向的最新动态。
议程概览
本次例会(会议记录原文)包含三个环节:
| 主题 | 主讲人 | 机构 |
|---|---|---|
| TileLens:tile 编程模型的程序可视化分析 | Taihua He | 乔治梅森大学 |
| Triton 在 Windows 上的扩展调研 | Quinn Pham | Intel |
| 社区问答(block pointer 弃用、TMA 命名、发布节奏) | Whitney Tsang | Intel |
另有延期议题:AMD Felix Lee 的 fly DSL 演讲推迟至 2026 年 7 月例会,Andrew Brown 团队的 Triton 扩展工作同样计划在 7 月汇报。
TileLens:面向 tile 编程模型的通用可视化分析工具
背景与动机:内核可观测性正在成为刚需
随着 mega kernels、异步执行和确定性(determinism)需求的增长,内核(kernel)的可观测性越来越重要。但当前的工具生态是碎片化的:
- 硬件侧:Nvidia、AMD 各自维护独立的分析工具;
- 软件侧:Triton、Tilelang、CuTile、Amazon NKI 等众多 tile 式 DSL 并存,甚至同一项目内会混用多个 DSL(例如 Mamba3 在同一个项目中同时使用了 CuTeDSL、Triton 和 Tilelang)。
TileLens 的目标正是成为面向 tile 式 DSL 的通用分析器:把不同 DSL 的公共操作统一映射到公共 IR 上,再交由统一的客户端消费。
设计:公共 IR + 可插拔客户端
TileLens 的整体架构分三层:
- 前端层:Triton、NKI 等 DSL 的公共操作(如
tl.load、nki.load)被降低到一套公共 IR; - 追踪层:通过函数装饰器(decorator)包装内核并追踪执行,输出一系列 IR 记录(IR records);
- 客户端层:IR 记录被 tracer(追踪器)、profiler(分析器)、sanitizer(检查器)、visualizer(可视化器)等客户端消费。
使用方式非常轻量:import triton_viz,装饰内核,然后通过修改一个配置值即可切换客户端(tracer / sanitizer / profiler)。
实现原理
实现上有三个关键点:
- 装饰器包装:用 Triton 风格的
[grid]语法包裹内核,生成内核接口和一个 SPMD 运行函数; - DSL 解释器替换:对 DSL 打补丁(patch),让其走解释器执行——Triton 本身已有解释器(见 python/src/interpreter.cc),NKI 则自定义实现了一个;
- 双重打补丁:对操作做双重 patch,注入插桩钩子,将 DSL 操作映射到 TileLens 公共操作。
新增一个 DSL 前端(以 NKI 为例)
接入一个新的 DSL 前端需要五个步骤:
- 用 NumPy 实现该 DSL 的全部函数(如
nki.ndarray、nki.matmul); - 把 DSL 命名空间 patch 到这些实现上,并提供
unpatch恢复原状; - 提供解释器,在 CPU 上的 SPMD 网格上运行内核;
- 对语义存在差异的 DSL 操作新增自定义 IR 操作(例如 NKI 的
dma_copy/tensor_copy被映射到新增的transfer操作); - 提供适配函数与操作名映射表,注册为前端。
新增一个客户端
实现客户端抽象类并覆写钩子即可:包括 pre/post run、参数回调(arg callback)、register_op_callback等。register_op_callback允许客户端定义按操作的行为,例如 tracer 在tl.dot、tl.load、tl.store之后记录输出。
值得关注的两个特性
- eager 与符号执行(用于 sanitizer / profiler):构建地址计算的依赖图,只求值分析所需的部分(如边界检查),比完整 eager 执行快得多;
- 并发网格启动:通过多线程运行 PID 来模拟 GPU 上的并发 SM 执行,使原子操作竞争行为贴近真实 GPU;并发度由
triton_viz.config.num_sms配置。
现场演示与当前局限
演示环节展示了三个客户端的效果:可视化器呈现 matmul 内核的输入数组、掩码、每个 PID 的加载区域、数值热力图、dot/load/store 记录与转置;sanitizer 对正确的 matmul 干净通过,但对注入的越界访问(如+ 1)会标出违规行与地址计算追踪链;profiler 展示加载/存储效率、掩码指标与潜在问题。
当前的局限与后续计划包括:sanitizer 的数据竞争检查器仍在开发中;tracer 基于 Python 较慢且内存占用高(保存了全部中间激活),激活检查点(activation checkpointing)可能缓解;暂未精细建模内存分配与并发;需要支持更多 DSL,CuTile 已列入路线图。
问答环节中,针对与 CUTracer / tritonparse / tl.parse 的对比,作者回应 TileLens 更上层——把任意高层 DSL 收敛到公共接口,聚焦语义正确性与中间激活分析,而非追求峰值性能提取。对 Simon 提出的共享内存分配可视化、寄存器/占用率 roofline、生命周期分析等问题,作者表示在没有编译器内部信息的情况下实现困难(如 NKI 场景),当前不在范围内,但这是用户扩展自定义硬件专属客户端的绝佳扩展点。
Triton 扩展在 Windows 上的调研(Intel)
背景:Triton extensions 框架
2026 年 1 月例会(Corbin、Puyan、Thomas、Simon)引入了 Triton extensions 框架:无需修改 Triton 核心即可新增 pass / dialect / op,其基础是 Triton 的插件(plugin)基础设施。Triton 的插件接口在 include/triton/Tools/PluginUtils.h 中定义:插件通过TRITON_PLUGIN_API宏导出tritonGetPluginInfo()入口点,返回PluginInfo(包含apiVersion、pass 列表、dialect 列表、自定义 op 列表与 Triton 版本),并通过TRITON_PLUGIN_PATHS环境变量加载(冒号分隔的共享库路径)。核心 Triton 编译流程、pass 管道都定义在 python/triton/compiler/compiler.py 中,而插件示例(含 pass 定义与加载逻辑)可参考 examples/plugins/README.md、examples/plugins/TritonPlugin.cpp 与 examples/plugins/Passes.td。
Intel 的实践:3 个上游化候选 pass
Intel 的调研方向是:用 pass 扩展把跨后端通用的 target-independent pass 上游化。他们实现了 3 个扩展 pass:hoist layout conversions(提升布局转换)、fuse reshape(融合 reshape)、remove boundary checks(移除边界检查)。其中 hoist layout conversions 同时被 Intel 和 AMD 使用,是很好的上游候选。
经验总结:接入成本极低——只需挂接到 pass 基础设施;在 Linux 上运行良好。
Windows 上的核心问题:符号导出与 65K 限制
扩展本质上是运行时动态加载的共享库,需要 LLVM/MLIR/Triton 符号的单一来源定义以保证类型身份一致(例如动态 cast)。问题出在符号导出策略:
- Linux 上:禁用
-fvisibility=hidden,把libtriton.so的所有符号全部导出,即可正常工作; - Windows 上:等效的
WINDOWS_EXPORT_ALL_SYMBOLS会撞上每个 DLL 65,000 个符号的上限。虽然存在一份解除该限制的 MSVC 链接器 RFC,但已搁置评审超过一年。
前进路径
- LLVM/MLIR 符号:当前 Windows 上没有任何受支持的 LLVM/MLIR 共享库分发方式。
BUILD_SHARED_LIBS仅供开发;官方推荐的分发选项LLVM_BUILD_DYLIB在 Windows 上不受支持。上游正在推进用LLVM_ABI宏标注 LLVM 公共接口,使 DyLib 构建保持在 65K 限制之内。 - Triton 符号:Triton 可以做同样的事——标注公共接口并只导出这些符号。这不仅可行,即便在 Linux 上也能带来更干净的 ABI 控制。
问答环节透露:LLVM_BUILD_DYLIB的 Windows 支持工作量很大(注解 CI 已被禁用,许多子任务连 issue 都还没有);库拆分是必然方向——扩展将分别链接libLLVM、libMLIR以及一个(或多个)Triton 库。
社区问答:block pointer 弃用、TMA 命名与发布节奏
Block pointer 弃用:指向 tensor pointer 还是 tensor descriptor?
近期 OpenAI 的改动在前端弃用 block pointer,将其降低为 tensor pointer。Intel 认为 block pointer 携带的结构化信息对其至关重要(Intel 有下游改动将其降低为 tensor descriptor),因此追问:为什么选择 tensor pointer?降低为 tensor descriptor 是否会被上游接受?
Intel 的 Ettore 认为:逻辑上,替换一个已弃用的语言特性应当保留语义信息——tensor descriptor 携带的信息与 block pointer 接近,而 tensor pointer 会丢失这些信息。OpenAI 的 Thomas Raoux(中途加入)回应:目标是彻底移除 block pointer;映射到 pointer 可以通过语言包装器直接实现,而映射到 tensor descriptor 工作量大且无法 1:1 转换;但愿意接受一个干净的、标准库风格的包装器,在目标支持的地方用 tensor descriptor 模拟 block pointer。目前各后端本就存在差异(部分 Nvidia 版本回退到 tensor pointer,另一些使用 TMA)。Whitney 将提交 PR 供评审。
从当前仓库代码可印证这一演进方向:在 python/triton/language/core.py 中,tl.make_block_ptr与tl.advance均已改为抛出NotImplementedError("Block pointers have been removed in favor of the tensor descriptor API"),而tl.make_tensor_descriptor(python/triton/language/core.py)成为推荐替代,其类型tensor_descriptor_base_type与值tensor_descriptor_base亦定义于同一文件。仓库代码中还保留了大量与 tensor descriptor 相关的 lowering 测试(见 test/Conversion/tritongpu_update_tensor_descriptor.mlir、test/Conversion/relayout_tritongpu.mlir 等),说明 descriptor 路径已是编译后端的主力实现。
use_tma命名问题
有 issue(pytorch/pytorch#163536)提议重命名 inductor 中use_tma参数,因为没有任何机制强制 tensor descriptor 必须走 TMA。Bill 回应暂无进展,将线下跟进。
Triton 发布节奏与 PyTorch 对齐
PyTorch 的发布频率在提高,这会如何影响 Triton?Andrey 回应:计划继续保持Triton 发布紧随 PyTorch 发布——理想情况下每次 PyTorch 发布都对应一次 Triton 发布,实际上可能是隔次发布。关键闸门是 PyTorch CI 中 Triton pin 的迁移能否保持绿色;若成功,就切出一次 Triton 发布。同时,围绕引入新架构或重要特性的发布,会投入更多精力。
小结
本次例会呈现了 Triton 生态的三条主线:TileLens 展示了"用统一 IR 收敛碎片化 DSL 工具链"的愿景,其 sanitizer 的符号执行、多线程并发网格模拟对内核开发者是立即可用的能力;Intel 的 Windows 调研将插件扩展的 ABI 问题摆上台面,LLVM_ABI标注与 Triton 公共接口导出是明确的可行路径;block pointer 的移除已在本仓库代码中落地(tl.make_block_ptr抛错、tl.make_tensor_descriptor上位),后续围绕"用 tensor descriptor 模拟 block pointer 的标准库包装器"的讨论值得持续关注。
完整会议录像见会议记录末尾的 Recording 链接(会议记录原文)。
【免费下载链接】tritonDevelopment repository for the Triton language and compiler项目地址: https://gitcode.com/GitHub_Trending/tri/triton
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考