NVIDIA、RustでGPUカーネルを直接開発できる「CUDA Rust」を発表
要点
-
米NVIDIAは、GPUカーネルをRustで直接記述しPTXへコンパイル可能にする「CUDA Rust」を発表した。
-
開発モデルとして、抽象度の高い「Tileトラック(cutile-rs)」と、スレッド単位で細かく制御できる「SIMTトラック(cuda-oxide)」の2種類が提供される。
-
cutile-rsは安定版Rust 1.89以上とCUDA 13.3で動作し、crates.ioで公開されすでに推論エンジンなどで実稼働している。
-
cuda-oxideはカスタムコード生成バックエンドを採用した初期アルファ版であり、固定Nightly環境下でコンパイル時安全性を検証しながら動作する。
-
同社はCUDA C++やCUDA Pythonとの言語間相互運用性をサポートし、2027年以降に向けて開発を推進する方針を示している。
-
米NVIDIAは2026年9月8日、自社の公式技術ブログにおいて、Rust言語を用いてGPUカーネルを直接記述・コンパイルできる開発環境「CUDA Rust」を発表した。これまでRust環境におけるGPUプログラミングでは、別言語で作成したカーネルを呼び出す手法が一般的だったが、CUDA Rustによりカーネル自体をRustで実装し、PTX(NVIDIA GPU向けの中間命令セット)へとネイティブコンパイルできるようになるという。同社は成熟したCUDA C++やCUDA Pythonに続き、CUDA Rustを2027年以降にかけて本格的に育成・成熟させていく方針だ。
背景:システム層で進むRust採用とGPUカーネルの課題
近年、推論エンジンや配信基盤、ドライバ、エージェントランタイムといったAIシステムの基幹層では、高い実行性能を維持しながらコンパイル時にメモリ関連の不具合を検知できるRustの採用が急速に進んでいる。NVIDIA自身もこの流れに加わっており、Linux向け「Nova」ドライバをRustで開発しているほか、AI推論基盤「NVIDIA Dynamo」のコアやプロファイリングツール向け「NVTX」バインディングなどにRustを採用してきた。
一方で、並列計算処理の中核を担うGPUカーネルだけは例外的な存在となっていた。Rustからカーネルを起動することはできても、カーネルの処理内容自体は他言語で記述せざるを得ない状況が続いていた。今回発表されたCUDA Rustは、この開発上の隔たりを埋め、カーネル実装まで含めた完全なRust環境を実現するために立ち上げられたプロジェクトである。
開発用途に応じた2つのプログラミングモデル
CUDA Rustでは、CUDAの設計思想に合わせて「Tile」と「SIMT」という2つのプログラミングモデル(トラック)が提供される。NVIDIAは新規にカーネルを開発する際、まずは抽象度の高いTileモデルから着手することを推奨している。Tileモデルではハードウェア固有のアーキテクチャ依存をコード内に残さずに済むためで、より精密なスレッド制御やメモリ配置が必要になった段階でSIMTモデルへ移行する運用が適していると説明している。
また、既存のシステム構成に合わせて最適な言語を選択できるよう、CUDA Rust、CUDA C++、CUDA Pythonの間で言語間相互運用性(相互呼び出し)をサポートする計画だという。これにより、特定の言語を選択しても他のエコシステムから孤立しない構造を担保するとしている。
安定版で動作する高水準アプローチ「cutile-rs」
Tileトラックを提供する「cutile-rs」は、安定版(stable)のRustで動作するタイルベースのGPUプログラミング環境である。タイルプログラミングとは、データのまとまり(タイル)に対する演算を記述し、スレッドへのマッピングやメモリレイアウトの最適化をコンパイラ側に任せる手法を指す。cutile-rsでは「CUDA Tile IR」を用いたJIT(実行時)コンパイルを通じてハードウェアに応じた最適なコード生成を行う。
メモリ安全性に関しては、テンソルの分割機能とRustの所有権システムを活用することで、コンパイル時に排他的アクセスを保証しデータ競合を防ぐ仕組みを備えている。
cutile-rsはRustの公式パッケージリポジトリであるcrates.ioで公開されており、Rust 1.89以上の安定版ツールチェーンとCUDA 13.3があれば、カスタムLLVMを導入することなく利用できる。すでにHugging Faceの推論エンジン「Grout」やLLM推論フレームワーク「mistral.rs」において実用されているという。
細かなスレッド制御を可能にする「cuda-oxide」
一方、SIMTトラックを担う「cuda-oxide」は、1スレッドごとの動作を記述して数千スレッドを並列稼働させる従来のSIMT(単一命令・複数スレッド)モデルを提供する。
cuda-oxideは公式コンパイラrustcのカスタムコード生成バックエンドとして実装されている。プログラム内の#[kernel]属性が付与された関数を検出し、RustのMIR(中間表現)、オープンソースのIRフレームワーク「Pliron」、LLVM IRを経てPTXへと変換する仕組みだ。その他のコードは通常のバックエンドに引き渡される。GPU向けの方言やコード変換処理は、LLVMバックエンドに渡る直前までRust内で処理される設計となっている。
メモリ安全性においては、「DisjointSlice」と呼ばれる仕組みやローンチ規約(関数実行時の契約条件)を導入することで、ポインタのエイリアシング(同一メモリ領域への重複参照)をコンパイル段階で防止する。
cuda-oxideは現在初期アルファ版として提供されており、Linux環境、Compute Capability 8.0以降のGPU、CUDA Toolkit 12.x以降、clangとlibclangヘッダー、および固定されたNightlyツールチェーン(2026-04-03版)が必要となる。ビルドや実行を支援するCargoサブコマンド「cargo-oxide」が用意されており、環境確認コマンド「cargo oxide doctor」や新規プロジェクト生成機能などが提供されている。