イベント日:2026年9月10日
Nvidiaは、開発者がGPUカーネルをRustで直接記述し、ネイティブにPTXへコンパイルできるようにする取り組み「CUDA Rust」を発表した。同社は2つの実験的な開発トラックを提示している。1つはスレッドとメモリを明示的に制御する必要がある開発者向けの低レベルなSIMT方式で、もう1つはアーキテクチャ固有の判断の多くをコンパイラに委ねるタイル指向モデルだ。
この取り組みは、推論エンジン、サービング基盤、ドライバ、ランタイムでRustの採用が進むシステムスタックに残された空白を対象としている。RustアプリケーションはすでにCUDAカーネルを起動できるが、通常、それらのカーネルは別の言語で記述しなければならない。Nvidiaによると、新プロジェクトは、確立されたCUDA C++およびCUDA Pythonのワークフローと並び、Rustを独立したカーネル言語にすることを目的としている。
Nvidiaは、ほとんどの新規開発について、まずTileトラックを検討することを推奨している。そのプロジェクトであるcutile-rsは、個々のスカラースレッドではなく、データブロック単位で計算を表現する。マクロがホストプログラム内のカーネル表現を取り込み、カーネルは最初に必要になった時点でCUDA Tile IRを介してコンパイルされる。その後、コンパイラが各論理タイルをGPUハードウェアへどのように割り当てるかを決定し、ソース内に記述されるアーキテクチャ固有のスケジューリングを減らす。
このタイル設計では、可変データを構造化するためにもRustの所有権を利用する。起動前に出力テンソルを重複しないチャンクへ分割し、各タイルに排他的な書き込みアクセス権を与える。この分割によって、メモリの所有権だけでなく起動ジオメトリも決まる。処理は同期されるまで遅延評価用の記述のまま維持され、GPU処理の完了後、ランチャーがテンソルの所有権を返す。
Cuda-oxideと呼ばれるSIMTトラックは、CUDA C++開発者になじみのあるプログラミングモデルに近い。カスタムのRustコンパイラバックエンドを使用し、カーネルとして指定された関数をRustの中間表現、Plironフレームワーク、LLVMの順に通してからPTXを生成する。ホストコードとデバイスコードは1つのファイルに置くことができ、Cargoのサブコマンドを通じてビルドできる。
Nvidiaの例では、専用の型を使用して一般的なエラーをより見つけやすくしている。非交差スライスは各GPUスレッドに対応する出力要素への排他的アクセス権を与え、1次元インデックス型と任意の戻り値によって範囲外アクセスへの対処を必須にする。起動コントラクトには想定されるブロック配置を記述でき、カーネル宣言および稼働中のデバイスに照らして設定を検証できる。このようなコントラクトを持たないカーネルには、明示的にunsafeとされた起動経路が残される。
現時点では、両トラックとも動作環境に厳しい要件がある。Nvidiaによると、Linuxとコンピュート能力8.0以降のGPUが必要だ。cuda-oxideではさらに、バージョンを固定したRustのnightlyツールチェーン、CUDA 12以降、Clangコンポーネントを使用する。cutile-rsは安定版Rust 1.89以降を使用するが、CUDA 13.3を必要とする。
CUDA Rustは、Nvidiaの成熟したツールチェーンを置き換えるものとは位置付けられていない。同社は、Rust関連の取り組みを2027年以降も開発し、言語間の相互運用性を支援する方針だとしている。開発者にとって今回のリリースは、初期段階の技術基盤となる。Tileはコンパイラ管理のマッピングを通じて移植性を提供し、SIMTは性能調整で必要となる詳細な制御を維持する。



