编译原理


triton学习:编译原理

流程概述

  1. 用户编写Triton kernel代码,通过Python API转换为Triton-dialect
  2. 利用lib/dialect/triton/transforms目录下的优化pass对Triton-dialect进行优化
  3. Triton-dialect被降级为Triton-GPU-dialect,对应的代码路径为lib/conversion/TritonToTritonGPU.cpp
  4. Triton编译器对Triton-GPU-IR进行优化,对应的代码路径为lib/dialect/tritonGPU
  5. Triton-GPU-IR被转换为LLVM IR,对应的代码路径为lib/conversion/TritonGPUToLLVM.cpp
  6. 最后,LLVM编译器对生成的LLVM IR进行最后优化,生成可以直接在目标GPU上运行的二进制机器代码,对应的代码路径为lib/Target/LLVMIR

在Nvidia上的编译流程为例,文件转换如下:

  1. .py -> .TTIR Triton IR
  2. .TTIR Triton IR -> .TTIR Triton-GPU IR
  3. .TTIR Triton-GPU IR -> .LLIR LLVM IR
  4. .LLIR LLVM IR -> PTX 文件

IR 中间表示

Triton IR

用于表示深度学习模型的计算图,并且是硬件无关的。其特点如下:

  • 高级抽象:能够使用接近于高级深度学习框架的方式来描述计算图
  • 操作表示:包含如矩阵乘法、卷积、激活函数等操作
  • 优化:编译器可以应用一些高级优化,如死代码消除、常量折叠等
  • 转换:可以被转换为更接近硬件的 Triton-GPU IR

Triton-GPU IR

专门针对GPU硬件优化的中间表示,其特点如下:

  • 硬件特定优化:包含针对特定GPU架构的优化,如内存访问模式、线程布局等。
  • 并行性表示:能够表示并行性,如线程块、网格等。
  • 性能优化:可以进行更细致的性能优化,如内存访问优化等。
  • 转换为LLVM IR:可以被转换成LLVM IR,以便利用LLVM的优化和代码生成能力。

LLVM IR

特点如下:

  • 平台无关:可以在不同的硬件平台上使用。
  • 优化:提供了大量的优化通道,可以在LLVM IR层面进行指令组合等优化。
  • 代码生成:最终会被转换为特定硬件平台的机器代码。
  • 模块化:可以表示程序的各个部分,如函数、全局变量、类型等。

以上目录结构解析参考自 Triton 源码目录结构


文章作者: leven
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 leven !
评论
  目录