CUDA Rustとは何か cuda-oxideとcutile-rs、2つのトラックでGPUカーネルをRustで書く仕組
み
NVIDIAが2026年9月8日に発表したCUDA Rustを解説する。GPUカーネルをRustで直接ネイティブコンパイルする公式ツールチェーンで、SIMT型cuda-oxideとタイル型cutile-rsという2トラック構成をとる。要件・インストール手順・使い方・既存のRust向けGPU手段との違いを整理する。
CUDA Rustとは何か
CUDA Rust は、NVIDIAが2026年9月8日にNVIDIA Technical Blogの記事「Introducing CUDA Rust: Two Tracks for Writing GPU Kernels」で発表した、GPUカーネルをRustで直接書くための公式ツールチェーンである。既存のCUDA C++で書かれたカーネルをRustから呼び出す「ラッパー」ではなく、RustのソースコードをネイティブにコンパイルしてGPU上で実行する点が特徴だ。発表は9月中旬にHacker Newsでも話題になった。
CUDA RustはSIMT(Single Instruction, Multiple Threads)モデルでCUDA C++に近いスタイルで書く「cuda-oxide」と、タイル(サブテンソル)単位でGPUを扱う「cutile-rs」という、思想の異なる2つのトラックで構成される。どちらも現時点ではアルファ版であり、NVIDIAは今後CUDA Rust・CUDA C++・CUDA Pythonの間の相互運用を計画していると発表している。
何が実現できるのか
従来、RustからGPUカーネルを扱う場合、多くはC++で書かれたCUDAカーネルをFFI経由で呼び出すバインディング(後述するcudarcなど)を使うか、コミュニティによる独自のコンパイラ基盤(Rust-CUDAやrust-gpuなど)を利用する必要があった。CUDA Rustは、NVIDIA自身がRustコードをGPU向けに直接コンパイルする経路を公式に提供する点が新しい。カーネルのロジック自体をRustで記述でき、Rustの所有権システムがコンパイル時にバッファのエイリアシング(同一メモリ領域への意図しない多重参照)を防ぐという安全性上の利点も挙げられている。
2つのトラック — cuda-oxideとcutile-rs

1つ目のトラックである cuda-oxide(github.com/NVlabs/cuda-oxide)は、CUDA C++と同様のSIMTモデルを踏襲する。個々のスレッドを直接扱うスタイルで、CUDA C++からの移行を意識した設計といえる。内部では、rustcのカスタムコード生成バックエンドを用いて、Rustのミッドレベル中間表現(MIR)をPliron IRに変換し、さらにLLVM IRを経てPTX(GPU命令セットの中間形式)へと落とし込む。現時点では早期アルファ段階であり、本番運用には向かないとNVIDIA自身が位置づけている。
2つ目のトラックである cutile-rs(github.com/NVlabs/cutile-rs、crates.ioのcutileクレート)は、個々のスレッドではなく「タイル」(サブテンソル)を単位に演算を記述するタイルプログラミングモデルを採用する。スレッド管理そのものを抽象化し、開発者はタイル単位の演算を書くことに集中できる。コンパイル方式も異なり、CUDA Tile IRを介して最初のカーネル起動時にJITコンパイルされる。cuda-oxideと同じくアルファ版だが、開発はより進んでおり、Hugging Faceの推論エンジンGroutやmistral.rsで既に利用されているという。
動作要件
両トラックに共通する要件として、GPUのCompute Capabilityが8.0以上(Ampere世代以降、たとえばRTX 30シリーズやA100以降)であることが求められる。Rustのツールチェーンとインストール方法はトラックごとに異なる。
| 項目 | cuda-oxide | cutile-rs |
|---|---|---|
| プログラミングモデル | SIMT(スレッド単位、CUDA C++に近い) | タイル(サブテンソル単位、スレッド管理を抽象化) |
| コンパイル方式 | rustc独自バックエンド: MIR→Pliron IR→LLVM IR→PTX | CUDA Tile IR経由でカーネル初回起動時にJITコンパイル |
| Rustツールチェーン | ピン留めされたnightly(nightly-2026-04-03) | 安定版Rust 1.89以降 |
| 必要なCUDAツールキット | CUDA 12.x以降 | CUDA 13.3 |
| 対応OS | Linux | Linux |
| その他要件 | clang/libclangが必要 | 公式発表時点では追加要件の記載なし |
| 完成度 | 早期アルファ、本番非推奨 | アルファだがより進んでおり実プロジェクトで採用例あり |
インストールと基本的な使い方
cuda-oxideは、ピン留めされたnightly Rustとcargo-oxideというcargoサブコマンドを介してプロジェクトを作成・実行する流れになる。
# cuda-oxide: ピン留めnightlyでcargo-oxideをインストール
cargo +nightly-2026-04-03 install --git https://github.com/NVlabs/cuda-oxide.git cargo-oxide
# 環境診断
cargo oxide doctor
# 新規プロジェクト作成
cargo oxide new vecadd_demo
# ビルド&実行
cargo oxide run一方のcutile-rsは、安定版Rustのcargoにcutileクレートを追加するだけで使い始められる、通常のRustクレートに近い体験になっている。
# cutile-rs: 通常のcargoプロジェクトにcutileクレートを追加
cargo new vecadd_demo
cd vecadd_demo
cargo add cutile
cargo runいずれのトラックも、カーネルの記述方法や具体的なAPIの詳細(属性マクロの書式やタイル演算の記法など)は公式発表時点では本記事のもとになった発表内容以上には確認できていない。実際にカーネルを書く際は、GitHubの各リポジトリにあるサンプルコードとドキュメントを参照する必要がある。GPUプログラミングと並行して、Tauri v2のRustバックエンド開発のように、Rustを他分野のバックエンドに使う動きも広がっており、Rustのユースケースは着実に拡大している。
既存の選択肢との違い
RustからGPUを扱う手段はCUDA Rust以前から存在する。位置づけを整理すると次のようになる。
| 手段 | カーネルの記述言語 | 位置づけ |
|---|---|---|
| CUDA C++ | C++ | NVIDIAの標準的なGPUカーネル記述言語。エコシステムとドキュメントが最も豊富 |
| CUDA Python / Triton系 | Python | Python DSLでカーネルを記述しコンパイルするアプローチ。研究・プロトタイピングでの採用が多い |
| CUDA Rust(cuda-oxide/cutile-rs) | Rust | NVIDIA公式、Rustコードをネイティブにコンパイル。本記事のトピック |
| Rust-CUDA / rust-gpu(コミュニティ) | Rust | コミュニティ主導のコンパイラ基盤でRustをGPU向けにコンパイルする試み。CUDA Rustとは別系統 |
| cudarc等のバインディング | Rust(呼び出し側のみ) | カーネル自体はCUDA C++等で書かれたものを、Rustから安全にラップして呼び出す仕組み |
cudarcのようなバインディングは「Rustから既存のCUDAカーネルを呼び出す」ものであり、カーネルの中身自体はC++で書かれている。これに対しCUDA Rustは、カーネルのロジックそのものをRustで記述してネイティブコンパイルする点が根本的に異なる。Rust-CUDAやrust-gpuといったコミュニティプロジェクトも同様にRustでGPUコードを書く試みだが、NVIDIA公式のツールチェーンではなく、開発体制やロードマップは別系統である。なお、AMD GPU上でCUDA向けソフトウェアを動かすZLUDAでAMD GPUでCUDAを動かす方法のようなアプローチは、既存のCUDAバイナリ・アプリを別ベンダーのGPUで動かす話であり、CUDA Rustの「NVIDIA GPU向けにRustでカーネルを書く」という話とは目的が異なる点に注意したい。
どちらのトラックを選ぶか
2つのトラックはどちらもアルファ版であり、現時点で本番投入を前提にした選択ではない。ただし用途に応じた向き不向きは整理できる。
- CUDA C++のスレッド単位の発想に慣れている、既存のSIMTカーネルをRustに移植したい → cuda-oxide
- 安定版Rustのツールチェーンで完結させたい、cargoに慣れた開発体験を重視する → cutile-rs
- 行列演算やテンソル演算を、スレッド管理を意識せずタイル単位で書きたい → cutile-rs
- 実プロジェクトでの採用実績(Grout、mistral.rs)を重視する → cutile-rsの方が現状では実績がある
- 最新のnightly固定やclang/libclang導入といった環境構築の手間を許容できるか → 許容できなければcutile-rsの方が導入は軽い
注意点・制約
現時点でのCUDA Rustにはいくつかの制約がある。まずOSはLinuxのみが対象で、WindowsおよびmacOSは公式発表上サポート対象に含まれていない。WSL2(Windows Subsystem for Linux)上での動作可否についても公式発表では明言されておらず、慎重に見るべきだろう。またGPU側の要件としてCompute Capability 8.0以上(Ampere世代以降)が必要なため、それより古い世代のGPUでは利用できない。ライセンス条件やベンチマーク数値など、公式発表時点で明記されていない項目については、本記事では推測や独自の実測値を記載していない。実運用を検討する場合は、各リポジトリのREADMEおよびライセンス表記を必ず確認してほしい。
よくある質問
CUDA RustはCUDA C++で書かれたカーネルをRustから呼び出す仕組みですか。
いいえ。cudarcのような既存のバインディングはC++で書かれたカーネルをRustから呼び出すラッパーですが、CUDA RustはRustのソースコードそのものをネイティブにコンパイルしてGPU上で実行する仕組みです。cuda-oxideはRust MIRからPliron IR・LLVM IRを経てPTXへ、cutile-rsはCUDA Tile IR経由でJITコンパイルされます。
cuda-oxideとcutile-rsはどちらを使えばよいですか。
CUDA C++に近いスレッド単位(SIMT)の書き方に慣れている場合はcuda-oxide、タイル単位でスレッド管理を意識せず記述したい場合や安定版Rustで完結させたい場合はcutile-rsが向いています。cutile-rsはHugging FaceのGroutやmistral.rsで採用例がある分、現状では開発がより進んでいます。
WindowsやmacOSでCUDA Rustは使えますか。
公式発表時点ではLinuxのみが対象で、WindowsおよびmacOSはサポートされていません。WSL2上での動作についても公式発表では明言されておらず、公式発表時点では未記載です。
CUDA RustはRust-CUDAやrust-gpuと同じものですか。
いいえ、別系統のプロジェクトです。Rust-CUDAやrust-gpuはコミュニティ主導でRustをGPU向けにコンパイルする試みですが、CUDA RustはNVIDIA自身が公式に提供するツールチェーンで、cuda-oxideとcutile-rsという2つのトラックで構成されます。
この記事に関連する無料ツール(登録不要・その場で結果)
お気軽にご相談ください
お問い合わせ