triton学习:编译原理
流程概述
- 用户编写Triton kernel代码,通过Python API转换为Triton-dialect
- 利用
lib/dialect/triton/transforms目录下的优化pass对Triton-dialect进行优化 - Triton-dialect被降级为Triton-GPU-dialect,对应的代码路径为
lib/conversion/TritonToTritonGPU.cpp - Triton编译器对Triton-GPU-IR进行优化,对应的代码路径为
lib/dialect/tritonGPU - Triton-GPU-IR被转换为LLVM IR,对应的代码路径为
lib/conversion/TritonGPUToLLVM.cpp - 最后,LLVM编译器对生成的LLVM IR进行最后优化,生成可以直接在目标GPU上运行的二进制机器代码,对应的代码路径为
lib/Target/LLVMIR
在Nvidia上的编译流程为例,文件转换如下:
.py->.TTIRTriton IR.TTIRTriton IR ->.TTIRTriton-GPU IR.TTIRTriton-GPU IR ->.LLIRLLVM IR.LLIRLLVM IR -> PTX 文件
IR 中间表示
Triton IR
用于表示深度学习模型的计算图,并且是硬件无关的。其特点如下:
- 高级抽象:能够使用接近于高级深度学习框架的方式来描述计算图
- 操作表示:包含如矩阵乘法、卷积、激活函数等操作
- 优化:编译器可以应用一些高级优化,如死代码消除、常量折叠等
- 转换:可以被转换为更接近硬件的 Triton-GPU IR
Triton-GPU IR
专门针对GPU硬件优化的中间表示,其特点如下:
- 硬件特定优化:包含针对特定GPU架构的优化,如内存访问模式、线程布局等。
- 并行性表示:能够表示并行性,如线程块、网格等。
- 性能优化:可以进行更细致的性能优化,如内存访问优化等。
- 转换为LLVM IR:可以被转换成LLVM IR,以便利用LLVM的优化和代码生成能力。
LLVM IR
特点如下:
- 平台无关:可以在不同的硬件平台上使用。
- 优化:提供了大量的优化通道,可以在LLVM IR层面进行指令组合等优化。
- 代码生成:最终会被转换为特定硬件平台的机器代码。
- 模块化:可以表示程序的各个部分,如函数、全局变量、类型等。
以上目录结构解析参考自 Triton 源码目录结构