
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 与语言演进三个方向的最新动态。议程概览本次例会会议记录原文包含三个环节主题主讲人机构TileLenstile 编程模型的程序可视化分析Taihua He乔治梅森大学Triton 在 Windows 上的扩展调研Quinn PhamIntel社区问答block pointer 弃用、TMA 命名、发布节奏Whitney TsangIntel另有延期议题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.ccNKI 则自定义实现了一个双重打补丁对操作做双重 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可能缓解暂未精细建模内存分配与并发需要支持更多 DSLCuTile 已列入路线图。问答环节中针对与 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 个上游化候选 passIntel 的调研方向是用 pass 扩展把跨后端通用的 target-independent pass 上游化。他们实现了 3 个扩展 passhoist layout conversions提升布局转换、fuse reshape融合 reshape、remove boundary checks移除边界检查。其中 hoist layout conversions 同时被 Intel 和 AMD 使用是很好的上游候选。经验总结接入成本极低——只需挂接到 pass 基础设施在 Linux 上运行良好。Windows 上的核心问题符号导出与 65K 限制扩展本质上是运行时动态加载的共享库需要 LLVM/MLIR/Triton 符号的单一来源定义以保证类型身份一致例如动态 cast。问题出在符号导出策略Linux 上禁用-fvisibilityhidden把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_descriptorpython/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命名问题有 issuepytorch/pytorch#163536提议重命名 inductor 中use_tma参数因为没有任何机制强制 tensor descriptor 必须走 TMA。Bill 回应暂无进展将线下跟进。Triton 发布节奏与 PyTorch 对齐PyTorch 的发布频率在提高这会如何影响 TritonAndrey 回应计划继续保持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),仅供参考