Source Version Commit Date
triton-lang/triton-ascend 3.6.0 b64287188046fe7bb0cfd424ee3e389f96a7affa 2026-09-07

Triton-Ascend 技术路线

项目方向概览

Triton-Ascend 保留 Triton 的 Python DSL、JIT、specialization、cache 和 TTIR 前端,在 TTIR 之后建立 Ascend NPU 专属编译与执行体系:

1
2
Python kernel → TTIR → structure/unstructure → Linalg/HIVM/HFusion
→ MLIR bytecode → BiShengIR → npubin → torch_npu + CANN

ASTSource.make_ir() 生成 TTIR,compile() 发现后端,AscendBackend.add_stages() 装配普通 ttir → ttadapter → mlirbc → bcmlir → npubin 路径;A5 pure-SIMT 则直接 ttir → npubin。项目实际覆盖语言扩展、NPU lowering/优化以及设备加载与发射,而非只替换 launcher。

工程结构

Triton-Ascend 保持 Triton 的前端入口和通用编译设施,在后端建立面向 Ascend 的分层实现:Python kernel 先进入 TTIR,再经过 Ascend 专属 lowering、结构化优化和硬件代码生成,最终由 npubin、torch_npu 与 CANN 完成加载和发射。

Layer Implementation Role
Frontend python/triton/compiler/compiler.py AST 到 TTIR 及编译阶段装配
Backend third_party/ascend/backend/compiler.py Ascend 编译阶段和后端选项
Dialect/IR third_party/ascend/include/Dialect/TritonAscend/IR/ Ascend op、layout 和硬件抽象
Lowering third_party/ascend/lib/Conversion/ TTIR/Linalg/结构化 IR 到 Ascend 表示
Pipeline third_party/ascend/lib/DynamicCVPipeline/ Cube/Vector、UB、流水和多缓冲优化
Launch third_party/ascend/backend/driver.py 设备、ABI、launcher 和执行边界
1
2
3
4
5
6
7
8
flowchart LR
A["Python Triton kernel"] --> B["TTIR"]
B --> C["Ascend backend stages"]
C --> D["Ascend dialect and structured IR"]
D --> E["Cube / Vector / UB pipeline"]
E --> F["MLIR bytecode and BiShengIR"]
F --> G["npubin"]
G --> H["torch_npu and CANN launch"]

项目核心竞争点

  1. TTIR 后精准分叉。 AscendBackend.supports_target() 只接管 NPU target,最大化复用 Triton 开发体验,同时避免硬套 NVIDIA warp/CTA 布局。
  2. 结构化 SIMD 与 pure-SIMT 双路线。 compile_mode 提供 simd、默认 simd_simt_template 和 A5 专属 simt_only;ttir_to_linalg() 负责结构化主链,ttir_to_npubin() 负责直编。
  3. 把 Cube/Vector 协同做成编译问题。 enable_dynamic_cv_pipeline 驱动数据流拆分、依赖分析、多缓冲和同步规划;InterCoreTransferAndSyncPass 处理 Vector↔Cube 传输与同步。
  4. 显式硬件语义。 CORE、PIPE、ascend_address_space_group、sync_block_set() 和 fixpipe() 把核型、流水线、UB/L1/L0 与同步带到 DSL。
  5. 编译—执行闭环。 linalg_to_bc_by_triton_mlir_opt() 与 bc_to_linalg_by_bishengir_opt() 交接 BiShengIR;NPUUtils.load_binary() 和 make_launcher() 消费 task type、workspace、同步锁等 metadata。

相比同类产品的实现差异

直接参照同一源码树中的 NVIDIA Triton 后端。

维度 NVIDIA Triton Triton-Ascend
前端 Python DSL → TTIR 复用相同前端
IR 主链 CUDABackend.add_stages() 使用 TTGIR→LLVM IR→PTX→cubin 绕过 TTGIR,采用结构化 Linalg/memref/HIVM/HFusion,或 pure-SIMT 直编
硬件模型 warp、CTA、GPU layout、shared memory Cube/Vector、pipe、UB/L1/L0、跨核 transfer/sync
codegen LLVM/NVPTX 与 CUDA assembler triton-mlir-opt、bishengir-opt、bishengir-compile
runtime CUDA driver torch_npu device/stream + CANN ACL/rt

根本差异是硬件语义的承载位置:NVIDIA 将线程和布局集中在 TTGIR;Ascend 结构化路线以 Linalg/memref、核型、存储层级和同步 pass 表达异构 AICore。pure-SIMT 也不是复用 CUDA TTGIR,而是让 BiShengIR 直接接收 TTIR。

复用的公共组件

组件 复用内容
Triton 前端 JITFunction.run()、AST/semantic、TTIR、specialization 和 grid
插件与编译框架 _discover_backends()、get_entry_points()、CompiledKernel
通用优化 make_ttir() 复用 inliner、canonicalizer、CSE、LICM、DCE、unroll
LLVM/MLIR 根 CMake 配置 复用 dialect、pass manager、TableGen、bytecode 与 LLVM dialect
标准 IR buffer_ir.cc 复用 memref 与 bufferization
厂商组件 编译器工具发现 连接 BiShengIR、CANN 与 torch_npu

可复用但自行开发的部分及原因

已做的发展方向

  • 主线已合入上游 Triton 3.6.0,对应 50c50cc7d。
  • A2/A3 已形成结构化 SIMD 主链,A5/950 已加入 pure-SIMT;NPUOptions.post_init() 固化架构相关模式和 metadata。
  • Ascend DSL 已覆盖 core、pipe、sync、fixpipe、fractal dot;Conv2dOp 已进入 IR。
  • DynamicCV 已覆盖数据流拆分、跨核传输、同步、多缓冲和 UB 检查;GraphOptimizePass 已在 TTIR 阶段匹配图模式。
  • 运行链已传递 task type、workspace 和 lock layout,并兼容 CANN 新旧 API,演进见 b1187ec82。自动 tiling、UB tuner、cost model cache、IR dump 和源码级调试亦已落地,源码 stepping 见 c2d48ad24。

正在做的发展方向

  • SSBuffer/DynamicCV 收敛。 最近仍连续修复读写依赖、multi-region、buffer slot 与 VF operand substitution,并优化 SDPA,见 8ba4ac4ce、54bb7c040、6ff78229c 和基线 b64287188046fe7bb0cfd424ee3e389f96a7affa。重点已从功能搭建转到复杂控制流、同步精度和真实算子性能。
  • SIMD/SIMT 覆盖扩展。 d1f8e2fa4 补强 shape-only pointer 的 indirect-load 分析,a674a6f85 调整 SinOp 的 SIMT template 路由,持续扩大默认混合模式的自动适用面。
  • 选项契约统一。 NPUOptions 已集中公开选项与内部 metadata,近期仍在处理废弃项兼容和 HFusion 开关传递,见 452e8717e、e1314a246、47e291c05。
  • 可观测与可重复调优。 图优化日志、autotune 磁盘缓存、L2 cache 清理和 debug-line 重写密集进入主线,见 e93350318、d78ae7718、c47ebc7cb、14ba391ad。
  • 算子与数学语义补齐。 conv2d() 由 6ff6d725a 加入;libdevice 接口与精度仍持续修订,见 7d0fd4533 和 ade29bb49。

技术路线结论

项目的技术价值集中在 TTIR 之后:前端最大化复用 Triton,后端以结构化 IR、Linalg/memref、HIVM/HFusion、Cube/Vector 数据流和 SSBuffer 映射 Ascend,再由 BiShengIR、torch_npu 与 CANN 完成 codegen、资源管理和发射。近期重心已从建立可工作的 NPU 后端,转向混合 Cube/Vector 与 SIMD/SIMT 路线在复杂控制流、性能、调试和调优上的持续收敛。