如何深入学习 Triton 的编译器技术?
随着 RISC-V 向量扩展(RVV)的成熟以及 AI 算力泛化的需求,社区正在大力推进 Triton 在 RISC-V 上的落地。本文将分享 Triton + RISC-V 的技术路径、演进情况及实践方法。
1. 技术路径
Triton 在 RISC-V 上的技术路径经历了从'能跑'到'高性能'的演进,核心挑战是如何将 Triton 基于 Tile(分块) 的编程模型高效映射到 RISC-V 的 SIMD(向量) 架构上。
1.1 编译管线
目前主流的技术路径是基于 MLIR 构建的:
- Triton AST -> TTIR:Python 代码被解析为 Triton 特有的中间表示(TTIR)。
- TTIR -> MLIR Dialects:由于目标是 RISC-V CPU 或类似 CPU 的 AI 加速器,目前有两种主要降级路径:
- 直接降级到 Vector Dialect(主导方向):直接映射为底层向量操作,性能较好。
- 降级到 Linalg/Tensor Dialect (TritonShared 路径):通用性更强,但目前针对特定硬件的极致性能尚未完全释放。
- MLIR -> LLVM IR:将上述表示转换为泛化的 LLVM IR。
- LLVM IR -> RISC-V Machine Code:LLVM 后端通过指令选择,将 IR 映射为 RISC-V 的 RVV 指令集。
1.2 核心技术依赖:RVV
- Triton 代码中大量的张量并行计算(如矩阵乘法),在 RISC-V 上完全依靠 RVV (RISC-V Vector Extension) 来加速。
- 固定长度 vs 可变长度:Triton 编译器天然倾向于生成固定向量长度(Fixed Vector Length)的掩码操作,而 RVV 是基于 VLEN(可变向量长度)设计的。目前编译路径中会强制指定 VLEN(如 256 位)进行对齐匹配。
1.3 性能表现与瓶颈
根据最近(2024 年底至 2025 年)在 SpacemiT K1 板等硬件上的测试反馈:
- 单线程性能:Triton 编译出的内核(通过 LLVM/ZCC)在执行类似 Softmax 或 Matmul 算子时,性能已经基本追平甚至在某些场景下略超(2%~4%)基于 C 语言手写的 GCC/LLVM 自动向量化代码。
- 多线程性能:通过 OpenMP 包装的 Triton 内核在多核扩展上表现优异,但在超多线程时(如 8 线程),可能会因为寄存器溢出 (Register Spill) 和上下文切换存储开销而略有性能损耗。
- 瓶颈点:离散内存访问(Gather/Scatter)的向量化效率、寄存器分配压力、以及 Mask 掩码生成的冗余指令是当前重点优化的方向。
2. 演进情况
根据 PyTorch 社区与玄铁等团队在 2026 年最新制定的 PyTorch + RISC-V Roadmap (#171659),Triton 位于该生态发展的第四阶段(Phase 4),也是终极目标:
- 原生 Triton Backend for RISC-V: 社区正在开发原生 RISC-V 代码生成后端,意味着未来不需要强依赖于 Triton-CPU 的妥协路径,而是直接输出对 RISC-V 友好的汇编。
- 拥抱 RVM (Matrix Extension): 除了 RVV(向量扩展),RISC-V 最新的矩阵扩展(RVM)将直接对接 Triton 的 Block 操作,极大提升 GEMM(矩阵乘法)算子的性能。
- 与
torch.compile无缝集成: 最终目标是让 RISC-V 像 Nvidia GPU 一样,当你在 PyTorch 里调用 时,底层 Inductor 能够直接调用 Triton 编译出高性能的 RISC-V 算子,无需开发者手动写 C++ / 汇编内核。


