NVIDIA の CUDA ツールキットを使用して Rust を GPU コンピューティングのための第一級言語にすることを目指す野心的な取り組みである Rust CUDA プロジェクトが、数年の休止期間を経て再始動しました。この進展は、Rust コミュニティが GPU プログラミングのための信頼性の高いソリューションを求めていた時期に、様々なプロジェクトで混合した結果を得ていた状況で起こりました。
このプロジェクトは、Rust を PTX コードにコンパイルするためのツールと、既存の CUDA ライブラリを使用するためのライブラリを提供することを目指しています。しかし、コミュニティの議論からは、休止期間中に生じた重大な課題と競合するソリューションが明らかになっています。
プロジェクトの歴史と現状
Rust CUDA プロジェクトは、ユーザーのコメントによると波乱に満ちた歴史を持っています。何年もの間、使用不可能で保守されていない状態にあり、正常に機能するには特定の数年前の Rust コンパイラ(rustc)と CUDA の両方のバリアントが必要でした。最近の再始動の発表は、プロジェクトを復活させる試みを示していますが、現在の Rust と CUDA のバージョンで動作する公式リリースはまだないようです。
この休止期間中、エコシステムにはギャップが生じ、他のプロジェクトがそれを埋めようとしてきました。プロジェクトの構造は非常に広範で、rustc_codegen_nvvm(NVVM IR をターゲットとする rustc バックエンド)、cuda_std(GPU 側の機能用)、cudnn(ディープニューラルネットワーク用)、cust(CPU 側の CUDA 機能用)など、複数のクレートを含んでいます。
Cudarc との競争
Rust CUDA プロジェクトが非アクティブな間、Cudarc と呼ばれる別のライブラリがコミュニティで大きな注目を集めています。複数のユーザーが、プロフェッショナルな環境で Cudarc を正常に使用していることを報告し、最新の Rust と CUDA バージョンとの互換性を称賛しています。
「要約すると、複数のプロジェクトで Rust 上の CUDA を使用している者として:Cudarc ライブラリは積極的に保守されており、うまく機能します。ただし、ホストとデバイスのデータ構造を共有することはできません。ライブラリが提供する関数を使用して、バイトストリームとして[シリアライズ/デシリアライズ]する必要があります。過去数年間の少なくとも任意の CUDA バージョンと GPU で動作します。」
主な違いは、Cudarc がホストとデバイスのデータ構造間のシリアル化を必要とするのに対し、Rust CUDA プロジェクトはホストと GPU 間で共有型を可能にすることを目指している点にあるようです。この違いは、即時の使いやすさとよりシームレスなプログラミング体験の間の基本的なトレードオフを表しています。
プラットフォーム独立性に関する懸念
コミュニティ内の重要な議論の一つは、プロジェクトが NVIDIA の CUDA に排他的に焦点を当てていることに関するものです。一部のユーザーは、Rust の GPU プログラミングを単一ベンダーの技術に結びつけることで、より広範なハードウェアプラットフォームへの採用を制限する行き止まりを作り出すと主張しています。
CUDA の支持者は、IDE 統合、グラフィカルデバッグ、広範なライブラリなど、その優れたツールエコシステムを指摘しています。彼らは、OpenCL、Vulkan コンピュートシェーダー、SYCL などの代替手段には、CUDA が提供するポリグロットサポートと開発者体験が欠けていると主張しています。
一方で、NVIDIA、AMD、Intel、Apple のハードウェア全体で動作するプラットフォームに依存しないアプローチを提唱する人もおり、Rust が様々な GPU アーキテクチャにコンパイルできる中間表現をターゲットにすべきだと提案しています。このアプローチは、CUDA が提供する特殊な最適化よりもクロスプラットフォームの互換性を優先します。
Rustにおける主要なGPUコンピューティングオプション
-
Rust CUDAプロジェクト
- 状態:数年間の休止期間を経て最近再開
- 目標:ホストとGPU間で共有データ構造を可能にする
- コンポーネント: rustc_codegen_nvvm 、 cuda_std 、 cudnn 、 cust 、 gpu_rand 、 optix
- ライセンス: Apache 2.0 と MIT のデュアルライセンス
-
Cudarc
- 状態:積極的にメンテナンスされている
- 互換性:最新の Rust と CUDA バージョンで動作
- 制限:ホストとデバイスデータ間のシリアライゼーションが必要
- GitHub: https://github.com/coreylowman/cudarc
-
その他の関連プロジェクト
- rust-gpu:シェーダー用に Rust を SPIR-V にコンパイルするコンパイラバックエンド
- glassful (2016): GLSL にコンパイルできる Rust のサブセット
- inspirv-rust (2017):実験的な Rust MIR → SPIR-V コンパイラ
- nvptx (2018): LLVM PTX バックエンドを使用
- accel (2020): nvptx メカニズムを使用した高レベルライブラリ
- risl (2020):実験的な Rust → SPIR-V コンパイラ
業界での採用と将来の展望
コミュニティの議論からは、NVIDIA の Rust への潜在的な関心について興味深い洞察が明らかになっています。あるユーザーは、CUDA Core Compute Libraries チームの誰かとの会話で、今後5年以内に NVIDIA が CUDA GPU をプログラムする言語として Rust をサポートする可能性があることを示唆されたと述べています。また別のユーザーは、NVIDIA がすでに高スループット低レイテンシの推論フレームワークである Dynamo で Rust を使用していることを指摘していますが、公開 API は Python ベースです。
NVIDIA がなぜ Rust エコシステムにより多くの投資をしていないのかという疑問は未解決のままで、一部の人々は同社がリソースを投入する前に十分なビジネス価値を見極めているのではないかと示唆しています。
プロジェクトが再始動するにあたり、メンテナーは積極的に貢献者を求めており、前途には多くの作業があることと、彼ら全員が本業を持っていることを認めています。この復活の成功は、以前にプロジェクトを停滞させた技術的課題を克服するのに十分なコミュニティの勢いを構築できるかどうかにかかっているでしょう。
今日 Rust で GPU コンピューティング機能を必要とする開発者にとって、コミュニティのコンセンサスは実用的なアプリケーションには Cudarc を推奨しているようですが、シームレスなホスト・デバイス統合というより野心的な目標に向けた Rust CUDA プロジェクトの進捗にも注目しています。