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 は、CUDA C++ やドメイン固有言語(DSL)に依存せずに、純粋な Rust で GPU カーネルを記述できるようにします。外部言語のバインディングを必要とせず、ホストコードとデバイスコードが同じファイルにあり、1つのコマンドでビルドできる単一ソースコンパイルを実現するカスタムコンパイラバックエンドを提供します。

動作方法

このプロジェクトは、カスタム rustc コードジェネレータバックエンドを実装しています。Rust ソースコードは、複数段階のパイプラインを経て変換されます:Rust ソース → Rust MIR → カスタム MLIR に似た中間表現である Pliron IR → LLVM IR → CUDA PTX。デバイス側では、型安全なインデックス操作、共有メモリ、ワープ/クラスタ操作のための抽象化を提供し、メモリ管理やカーネル起動のためのホスト側ランタイム(cuda-corecuda-async)も併せて提供しています。

対象ユーザー

純粋な Rust の安全性と表現力で高性能な GPU カーネルを開発したい Rust 開発者、および NVIDIA ハードウェア(Hopper および Blackwell アーキテクチャを含む)で作業している研究者やエンジニアに最適です。CUDA C++ の複雑さを避けたい方におすすめです。

主な特徴

  • 単一ソースコンパイル:ホストコードとデバイスコードを1つのファイルで管理し、cargo oxide build でビルド可能。
  • 純粋な Rust カーネル:モノモルフィズムをサポートするジェネリック関数、キャプチャを持つクロージャ、enum やパターンマッチングなどの標準 Rust 機能を完全に利用可能。
  • 包括的な GPU サポート:TMA、クラスタ、バリア、アトミック操作など、GPU のインプリントに完全アクセス可能。
  • 非同期実行:組み合わせ可能な非同期 GPU 操作を実現する専用の cuda-async レイヤー。
  • デバイス相互運用性:LTOIR を通じた Rust と C++/CCCL の相互運用をサポートするデバイス FFI。
  • 高度なハードウェアサポート:Blackwell のテンソルコアや GEMM 実装を対象とした特別なサンプルを含む。

関連

  • Dispatch
  • プロジェクト
  • プロジェクト
  • Dispatch
  • Dispatch