NVIDIA Labsから、Rustプログラミング言語を用いてSIMT(単一命令マルチスレッド)GPUカーネルをネイティブに記述するための実験的コンパイラ「cuda-oxide 0.1」がリリースされた。これは独自のDSL(ドメイン特化言語)や外部のC/C++バインディングに依存せず、標準的なRustのコードを直接NVIDIAのPTX(Parallel Thread Execution)フォーマットへコンパイルするカスタムrustcバックエンドである。

従来のGPUプログラミング環境において、RustからCUDAを利用するアプローチはいくつか存在していた。しかしその多くは、既存のCUDA C++コードをラップするバインディング層を挟むか、あるいは特定のDSLを用いて中間表現を生成し、実行時にコンパイルする形式を採用していた。cuda-oxideはこうした中間層を排除し、「純粋なRust」でカーネルを記述できる環境を構築する点に特徴がある。

このプロジェクトは現在アルファ版という初期段階にあるものの、RustコミュニティとGPU開発者の双方から強い関心を集めている。NVIDIAのエンジニアが直接主導する形でRustのエコシステムに本格的なCUDAサポートが統合されることは、システムプログラミング言語としてのRustの適用領域を大きく拡張する出来事である。

AD

シングルソースコンパイルとネイティブな開発体験

cuda-oxideの中核的な価値は、ホスト側のコードとデバイス側のカーネルコードを同一のファイルに記述できる「シングルソースコンパイル」の実現にある。開発者は cargo oxide build という一度のコマンドを実行するだけで、ホスト向けのバイナリとGPU向けのPTXコードの両方を生成できる。

この開発体験は、CUDA C++における nvcc コンパイラの利便性をRustの世界に持ち込むものである。カーネル関数には #[kernel] 属性を付与するだけでよく、型安全なインデックス付け、共有メモリの操作、スコープ付きアトミック操作、バリア同期など、デバイス側の低レイヤな抽象化がRustの文法の中で提供される。

さらに、クロージャのキャプチャやジェネリクスを通じた単相化(Monomorphization)など、Rustが持つ強力な言語機能がGPUカーネル内でも機能する。例えば、任意のクロージャを受け取る高階関数を定義し、ホスト側から渡された変数を自動的にPTXのカーネルパラメータとしてバインドすることが可能である。これにより、ボイラープレートコードを削減し、再利用性の高いモジュール化されたGPUコードを構築できる。

Plironを利用したコンパイルパイプラインのアーキテクチャ

cuda-oxideは、標準のrustcコンパイラのバックエンドとなるべく、極めて精巧な多段コンパイルパイプラインを構築している。ソースコードはまずRust MIR(Mid-level Intermediate Representation)に変換された後、Rust向けに開発されたMLIRライクな中間表現フレームワークである「Pliron」を経由する。Plironの導入により、コンパイラはコードの抽象度を段階的に下げながら、アーキテクチャに依存しない最適化と、GPU固有のハードウェア命令に対する密結合な最適化を分離して実行することが可能になる。

具体的には、Rust MIRから dialect-mir への変換、LLVM IRをモデル化した dialect-llvm への降下(Lowering)を経て、最終的にLLVM 21以降のNVPTXバックエンドを通じてPTXが生成される。この多段的なパイプラインによって、TMA(Tensor Memory Accelerator)やWGMMAといった最新アーキテクチャ(HopperBlackwell)固有のハードウェア命令を正確にマッピングしている。

LLVM 21が要求要件となっている背景には、こうした最新のNVIDIA GPUが持つ固有命令への対応がある。従来のLLVMでは処理できなかった専用のテンソルコア命令群を呼び出せるようにすることで、抽象化の代償としてパフォーマンスを犠牲にしないという設計思想が貫かれている。実際、B200 GPUを用いたGEMM(行列積)のテストでは、理論限界の58%(868 TFLOPS)という極めて高いパフォーマンスを達成している。

AD

LTOIRを通じたクロス言語の相互運用性

cuda-oxideは、純粋なRustコードのコンパイル機能に加えて、既存のC++エコシステムとの共存を強く意識して設計されている。特筆すべきは、Blackwell以降のアーキテクチャで導入されたデバイス側のリンク時最適化(LTO)に対応するLTOIR(Link-Time Optimization Intermediate Representation)の生成機能である。

これまでは、Rustで記述したコードとCUDA C++で記述された既存のコードベースをリンクさせる際、オーバーヘッドや最適化の阻害が課題となることが多かった。cuda-oxideがLTOIRを出力し、デバイス側でのFFI(Foreign Function Interface)をサポートすることで、RustとC++のコードはコンパイル後に効率的に統合される。例えば、CCCL(CUDA C++ Core Libraries)のような高度に最適化された既存のNVIDIAライブラリをRustのカーネルから直接呼び出す、あるいはその逆の連携が可能になる。

このような言語間の境界を越える相互運用性は、巨大な既存のコードベースを抱えるHPCプロジェクトが、段階的にRustへ移行するための現実的なパスを提供する。完全にRustで書き換えることなく、新規モジュールや安全性が強く求められる部分からRustを導入するという漸進的なアプローチを可能にする。

非同期実行とエコシステムの拡張

cuda-oxideは単なるコンパイラにとどまらず、ホスト側の実行環境を包括的に管理するランタイムクレート(cuda-corecuda-async)を同梱している。特に非同期実行のサポートは強力であり、cuda_launch_async! マクロを用いることで、遅延評価される DeviceOperation を生成できる。

これにより、Tokioなどの非同期ランタイムとネイティブに連携し、ホストとデバイス間のデータ転送、カーネル実行のオーバーラップ、複数ストリームの並行処理を極めて直感的なコードで記述できる。例えば、巨大なニューラルネットワークの推論を行う際、あるレイヤーの計算結果を待たずに次のデータの転送を裏側で非同期に開始するといったパイプライン処理が容易になる。現代のAI推論や複雑な物理シミュレーションにおいて、I/Oと演算のオーバーラップは絶対的な要件である。Rustがもつ所有権モデルや借用チェッカー、さらには高度な非同期モデルをGPU制御に適用することで、開発者はデータ競合やデッドロックといった並行プログラミング特有の罠をコンパイル時に回避しつつ、高い並行性を実現できる。

AD

既存のRust GPUプロジェクトとの差異とマクロ的文脈

RustからGPUを操作するプロジェクトは、すでに複数存在している。代表的なものに Rust-GPUrust-cudaCubeCL などがある。cuda-oxideはこれらのプロジェクトと競合するものではなく、それぞれが異なる問題領域を対象としている。

背景として考慮すべきは、なぜ今このタイミングでNVIDIAが公式にRustへの歩み寄りを強めているのかという点である。長年、CUDAを中心とするGPUネイティブ開発はC++が独占的な地位を築いてきた。しかし、C++の巨大なエコシステムは自由度が高い半面、メモリ管理のエラーに起因する深刻なセキュリティ脆弱性や、並行処理における予測困難なバグを頻発させてきた。特にデータセンターやAIインフラストラクチャにおいては、システム全体の堅牢性がクリティカルな意味を持つ。米国政府がC/C++などのメモリ安全でない言語からの脱却を推奨する中で、次世代のHPC(ハイパフォーマンスコンピューティング)基盤を支えるシステム言語として、Rustを第一級市民に引き上げることはNVIDIAにとっても中長期的なエコシステム防衛の戦略的要請となっている。

rust-cuda は、Rustの言語モデル(例えば非同期処理など)をGPU上で再現することに重点を置いている。一方、cuda-oxideは「CUDAのプログラミングモデルを安全なRustの中に持ち込む」ことに主眼を置いている。つまり、C++で __global__ 関数を書くのと近い感覚で、SIMT実行モデルやスレッドブロックの概念を直接操作することを前提としている。

また、CubeCL がWGPUやROCmを含むマルチプラットフォームな実行環境を前提とした移植性の高いDSLを提供するのに対し、cuda-oxideはNVIDIA PTXおよびSASSへの直接的なコード生成に特化している。ハードウェアの微細な挙動に最適化された数値計算ライブラリへのアクセスが、安全なメモリ管理を提供するRustの型システム上で実現される。データ競合やバッファオーバーフローといった低レイヤ特有のバグをコンパイル時に排除しながら、最高峰のパフォーマンスを引き出す計算科学向けの新しい基盤となる。

現段階ではAPIの破壊的変更が予想されるアルファ版であるが、NVIDIAの公式プロジェクトとしてRustコミュニティとの対話を通じて開発が進められている事実は重い。C++が独占してきたGPUネイティブ開発の領域に、Rustが本格的に参入するための技術的基盤が確立されつつある。