NVlabs/cuda-oxide
cuda-oxide is an experimental Rust-to-CUDA compiler that lets you write (SIMT) GPU kernels in safe(ish), idiomatic Rust. It compiles standard Rust code directly to PTX — no DSLs, no foreign language bindings, just Rust.
解決的問題
cuda-oxide 允許開發者使用純粹的 Rust 寫出 GPU 內核,而不需依賴 CUDA C++ 或領域特定語言(DSL)。它透過提供一個自訂的編譯器後端,消除對外語系綁定的需求,實現單一來源編譯——即主機程式碼與裝置程式碼位於同一檔案中,並以單一指令完成建置。
工作原理
此專案實作自訂的 rustc 程式碼產生後端。它透過多階段流程轉換 Rust 程式碼:Rust 源碼 → Rust MIR → 一種稱為 Pliron IR 的自訂 MLIR 類中間表示 → LLVM IR → CUDA PTX。它提供一組裝置端抽象,支援類型安全的索引、共用記憶體與 warp/cluster 操作,同時提供主機端執行時期(cuda-core 與 cuda-async)用於記憶體管理與內核啟動。
適用對象
專為希望使用 Rust 的安全性與表達力來建構高效能 GPU 內核的 Rust 開發者設計,也適合在 NVIDIA 硬體(包含 Hopper 與 Blackwell 架構)上工作的研究人員與工程師,他們希望避開 CUDA C++ 的複雜性。
主要亮點
- 單一來源編譯:主機與裝置程式碼統一管理於一個檔案中,透過
cargo oxide build命令建置。 - 純粹的 Rust 內核:支援泛型函數的單態化、帶捕獲的閉包,以及列舉、模式比對等標準 Rust 特性。
- 全面的 GPU 支援:完全存取 GPU 內建函數,包含 TMA、叢集、屏障與原子操作。
- 非同步執行:專用的
cuda-async層,支援可組合的非同步 GPU 操作。 - 裝置互操作性:透過 LTOIR 支援 Rust 與 C++/CCCL 的裝置 FFI 互操作。
- 高階硬體支援:包含針對 Blackwell 張量核心與 GEMM 實作的專用範例。
相關
- Dispatch
- 專案
- 專案
- Dispatch
- Dispatch