NVIDIAは、Rust言語を用いてGPU上で動作するカーネルを開発できるCUDA Rustツールキットの開発を発表しました。このツールキットは、コンパイル時にメモリ安全性を確保し、競合状態を防止します。CUDA Rustは来年、CUDA C++およびCUDA Pythonツールキットと同様に、実運用プロジェクトに適したレベルまで開発される予定です。
CUDA Rustツールチェーンは、並列カーネル開発のための2つのモデル、SIMT(単一命令複数スレッド)とTileをサポートしています。SIMTモデルでは、単一スレッドの低レベル定義、数千ものスレッドの起動と管理が可能です。Tileモデルはより高いレベルの抽象化を提供し、個々のスレッドを明示的に管理する代わりに、データブロック(タイル)を操作するアルゴリズムを定義します。Tile IRコンパイラは、スレッド操作、アクセス同期、メモリ管理、およびテンソルコア間でのデータ分散をすべて処理します。
SIMTモデルを使用したRust言語での開発のために、cuda-oxideコンパイラが開発されており、標準型システムとRust所有権モデルを使用してRust言語のコードをコンパイルし、実行命令に直接変換することができます。 仮想マシン CUDA PTX(並列スレッド実行)。GPUカーネルは通常のRustで記述されますが、no_std環境で実行され、標準Rustライブラリ(libstd)にアクセスできず、libcoreライブラリの関数と特殊なRust抽象化のみを使用できます。
Rustで記述されたCUDAカーネルは、型保護(safe)、unsafeブロックの使用、および低レベルのハードウェア命令へのアクセスを可能にします。安全性を確保するため、DisjointSlice型が提案されており、各スレッドが自身のデータのみに排他的にアクセスできるようになっています。cuda-oxideコードはApache 2.0ライセンスで提供されています。
Tailモデルを実装するために、ctile-rsライブラリが提案されています。このライブラリは、Rustの慣用的な言語を使用して、CUDAカーネルに直接コンパイルされるコードを作成することを可能にします。ctile-rsは、GPU上で実行されるコードにRustの厳格な所有権と借用ルールを適用します。カーネルは、データブロック上で動作するシングルスレッドプログラムとして実装され、コンパイラは計算を自動的にスレッドに分割し、それらの同期を保証します。スレッドには不変テンソルへの共有アクセス権が付与され、可変テンソルは安全なアクセスを保証するために互いに素なブロックに分割されます。ctile-rsコードはApache 2.0ライセンスの下で配布されます。
出所: オープンネット.ru
