mirror of
https://github.com/compiler-explorer/compiler-explorer.git
synced 2025-12-27 10:33:59 -05:00
Close #5530. Infra: https://github.com/compiler-explorer/infra/pull/1711. Previous work by @siboehm at #5531 ## Summary This pull request introduces support for the [Triton](https://github.com/triton-lang/triton) language, a Python-based DSL for writing highly efficient GPU kernels. - [x] **New Language Support**: I've added comprehensive support for the Triton programming language, allowing users to compile and inspect Triton kernels within Compiler Explorer. (c.f., `lib/compilers/triton.ts`) - [x] **Python Wrapper for Compilation**: A new Python wrapper script (`triton_wrapper.py`) has been introduced to manage Triton compilation, patching its behavior to dump compiled kernels and intermediate representations without requiring actual execution, and consolidating the output for Compiler Explorer. - [x] **Device Assembly View**: Enables viewing of generated device assembly code (e.g., PTX, AMDGCN) and various intermediate representations (MLIR, LLVM IR) produced by the Triton compiler. - [x] **MLIR Parsing**: New parsers (`asm-parser-mlir.ts` and `mlir-pass-dump-parser.ts`) have been added to correctly interpret and display MLIR assembly and optimization pass dumps, including source location information. - [x] **Multi-Version & Multi-Backend Support**: Painstakingly includes all 8 versions (from 2.2.0 to 3.3.1) of Triton that supports Python 3.12. Supports both CUDA and HIP backend for Triton 3. ## Screenshots Source and assembly: <img width="1354" height="789" alt="image" src="https://github.com/user-attachments/assets/c29650ff-2073-40e0-a9e6-ff8377094b5e" /> Device view for MLIR and LLVM IR: <img width="1402" height="670" alt="image" src="https://github.com/user-attachments/assets/43dd5c68-ca78-41b1-9865-e97ffe3ef73c" /> Opt pipeline viewer: <img width="1408" height="668" alt="image" src="https://github.com/user-attachments/assets/429eef8c-aaac-4781-aafa-39ef0ffc7241" /> Diff of TTIR in Triton 3.3.1 vs 2.3.0: <img width="1580" height="726" alt="image" src="https://github.com/user-attachments/assets/a928c893-dd9a-4c3a-a048-14046e56a14c" /> CUDA & HIP: <img width="1596" height="800" alt="image" src="https://github.com/user-attachments/assets/c18800c3-cfad-4e5e-96de-ba92c9f236ea" /> ## Implementation Details (and Notes for Reviewers) - For Device Assembly View, I Implemented `MlirAsmParser` for parsing MLIR assembly. Technically MLIR is not an assembly language, but there is no better choice to make the source line map work w/ device view. - I Implemented `MlirPassDumpParser` for processing MLIR optimization pass dumps. I tried to subclass `LlvmPassDumpParser`, but they turn out to be too different to worth doing it. - `LlvmPassDumpParser` made some assumptions that do not hold true for MLIR passed. Some effort is put to make sure that the passes are properly diff-ed, since some passes can run multiple times and also sometimes pass can be nested (i.e., some number of `before`s followed by some number of `after`s) - A lot of effort is put into `patch_triton` to make sure that the we only compile the kernel without actually running it, and that needs to work across all the versions we support. ## Steps to Run Locally 1. Clone https://github.com/ShawnZhong/compiler-explorer-infra.git 2. Install Triton to `/opt/compiler-explorer/triton`: ```sh $ cd compiler-explorer-infra $ ./bin/ce_install install triton $ ls /opt/compiler-explorer/triton # v2.2.0 v2.3.0 v2.3.1 v3.0.0 v3.1.0 v3.2.0 v3.3.0 v3.3.1 ``` 3. Clone https://github.com/ShawnZhong/compiler-explorer.git and checkout branch `triton` 4. Run Compiler Explorer ```sh make EXTRA_ARGS='--language triton' dev ``` 5. Enjoy --------- Co-authored-by: Matt Godbolt <matt@godbolt.org>
53 lines
2.4 KiB
INI
53 lines
2.4 KiB
INI
compilers=&triton_nvidia:&triton_amd
|
|
defaultCompiler=triton_nvidia_331
|
|
compilerType=triton
|
|
interpreted=true
|
|
supportsBinary=false
|
|
supportsExecute=false
|
|
isSemVer=true
|
|
notification=Experimental Triton support on Compiler Explorer. For tutorials, bugs reports, and feature requests, please visit <a href="https://github.com/ShawnZhong/compiler-explorer-triton">here</a>.
|
|
|
|
group.triton_nvidia.compilers=triton_nvidia_331:triton_nvidia_330:triton_nvidia_320:triton_nvidia_310:triton_nvidia_300:triton_nvidia_231:triton_nvidia_230
|
|
group.triton_nvidia.groupName=Triton (Nvidia)
|
|
group.triton_nvidia.options=--backend cuda --arch 90 --warp_size 32
|
|
|
|
compiler.triton_nvidia_331.name=Triton 3.3.1 (Nvidia)
|
|
compiler.triton_nvidia_331.exe=/opt/compiler-explorer/triton/v3.3.1/bin/python3
|
|
|
|
compiler.triton_nvidia_330.name=Triton 3.3.0 (Nvidia)
|
|
compiler.triton_nvidia_330.exe=/opt/compiler-explorer/triton/v3.3.0/bin/python3
|
|
|
|
compiler.triton_nvidia_320.name=Triton 3.2.0 (Nvidia)
|
|
compiler.triton_nvidia_320.exe=/opt/compiler-explorer/triton/v3.2.0/bin/python3
|
|
|
|
compiler.triton_nvidia_310.name=Triton 3.1.0 (Nvidia)
|
|
compiler.triton_nvidia_310.exe=/opt/compiler-explorer/triton/v3.1.0/bin/python3
|
|
|
|
compiler.triton_nvidia_300.name=Triton 3.0.0 (Nvidia)
|
|
compiler.triton_nvidia_300.exe=/opt/compiler-explorer/triton/v3.0.0/bin/python3
|
|
|
|
compiler.triton_nvidia_231.name=Triton 2.3.1 (Nvidia)
|
|
compiler.triton_nvidia_231.exe=/opt/compiler-explorer/triton/v2.3.1/bin/python3
|
|
|
|
compiler.triton_nvidia_230.name=Triton 2.3.0 (Nvidia)
|
|
compiler.triton_nvidia_230.exe=/opt/compiler-explorer/triton/v2.3.0/bin/python3
|
|
|
|
group.triton_amd.compilers=triton_amd_331:triton_amd_330:triton_amd_320:triton_amd_310:triton_amd_300
|
|
group.triton_amd.groupName=Triton (AMD)
|
|
group.triton_amd.options=--backend hip --arch gfx942 --warp_size 32
|
|
|
|
compiler.triton_amd_331.name=Triton 3.3.1 (AMD)
|
|
compiler.triton_amd_331.exe=/opt/compiler-explorer/triton/v3.3.1/bin/python3
|
|
|
|
compiler.triton_amd_330.name=Triton 3.3.0 (AMD)
|
|
compiler.triton_amd_330.exe=/opt/compiler-explorer/triton/v3.3.0/bin/python3
|
|
|
|
compiler.triton_amd_320.name=Triton 3.2.0 (AMD)
|
|
compiler.triton_amd_320.exe=/opt/compiler-explorer/triton/v3.2.0/bin/python3
|
|
|
|
compiler.triton_amd_310.name=Triton 3.1.0 (AMD)
|
|
compiler.triton_amd_310.exe=/opt/compiler-explorer/triton/v3.1.0/bin/python3
|
|
|
|
compiler.triton_amd_300.name=Triton 3.0.0 (AMD)
|
|
compiler.triton_amd_300.exe=/opt/compiler-explorer/triton/v3.0.0/bin/python3
|