VectorWare、Rustのportable SIMDをNVIDIA GPUのワープにマップ

Christian Legnittoのコンパイラチームは、通常のRustの抽象化をGPUのスレッド、レーン、および非同期実行にわたって拡張している。

By · Published

Primary source: VectorWare

Why it matters

VectorWare is moving GPU programming toward familiar systems code. Portable SIMD fills the lane-level gap, though Rust's API and VectorWare's compiler remain experimental.

The translation and efficient execution of Rust's portable SIMD abstractions onto NVIDIA GPU warps (Flat modernist vector illustration in the spirit of mid-century corporate annual reports — bold simple shapes, textured overprint)

VectorWareは8月10日、NVIDIA GPU上で動作するRustのportable SIMD APIをデモンストレーションし、創設者Christian Legnitto (@legneato)がGPUネイティブなアプリケーション向けに開発者に使ってほしいとしているプログラミングモデルの一部をさらに示した。技術的な投稿では、VectorWareは通常のcore::simdコードがGPUワープの32レーンにまたがる操作にコンパイルされる様子を示した。

この取り組みはVectorWareのスタックにある特定の穴を埋めるものだ。VectorWareは以前、RustのスレッドをGPUワープにマッピングし、別々のワープが独立してスケジュールされるCPUスレッドのように振る舞えるようにしていた。そのアプローチでは、開発者がGPU固有のプログラミングに踏み込まない限り、各ワープ内のレーンが十分に利用されないままだった。Portable SIMDはRustコードにこれらのレーンにアクセスする馴染みのある方法を提供する。

Legnittoはキャリアを通じてプラットフォーム移行の周辺で働いてきた。VectorWareは彼の以前の役職としてApple、Mozilla、Facebook、Robinhoodを挙げており、主要投資家であるThe General Partnershipは彼がFacebookの最初のネイティブモバイルアプリを立ち上げたと評価している。彼はまた、VectorWareの作業を支えるオープンソースのコンパイラプロジェクトであるrust-gpurust-cudaも維持している。

その経歴はVectorWareの中核的な賭けを形作っている。GPUプログラミングは専門化されたカーネル、API、ベンダー固有のイントリンシックの集合のままではなく、主流のソフトウェア開発の延長として扱われるべきだというのが彼らの信念だ。VectorWareはThe General Partnershipが率いるシードラウンドを経て、2025年10月23日に設立を発表した。VectorWareは元Mozilla CEOのJohn Lilly、Patrick Kavanagh、Nick Canditoをエンジェル投資家として名を連ねた。

レーンを埋める

Rustのcore::simdは固定個数の値に対する操作を表現するための汎用的なSimd<T, N>型を提供する。CPU上では、コンパイラがそのコードをx86-64やArmハードウェアで利用可能なベクター命令に低下(lower)できる。開発者は加算、比較、リダクションを一度書くだけで、各命令セット用に別々の実装を維持する必要がなくなる。

VectorWareはGPUワープを別のベクターターゲットとして扱う。NVIDIAはGPUスレッドを32レーンのワープに編成している。VectorWareはSimd<i16, 32>値をそれらのレーンにマップし、各レーンに1要素を配置する。こうした値同士の加算はワープ全体を横断する1つの命令になることができる。

デモは要素ごとの算術演算を超えている。VectorWareのサンプルは乗算、比較マスク、条件付き選択、リダクションを用いて小さなReLU風のドット積を計算する。コンパイラはリダクションをワープシャッフル命令にマップし、allanyのようなマスク照会にはGPUのvoteやballot操作を使用する。

VectorWareの枠組みには注意書きが必要だ。NVIDIAは個々のGPUスレッドが独自の制御フローを維持できるため、SIMTを伝統的なSIMDと区別している。VectorWareはワープの共有された実行特性をRustのベクター抽象のターゲットとして利用している。多くの操作に対してマッピングは直接的だが、分岐して異なる制御フローや不規則なレーン移動がある場合はGPU固有のコストが依然として発生する。

このマイルストーンはまた、VectorWareが1月以来組み上げてきたプログラミング階層を完結させるものでもある。VectorWareはまずRust's standard library to the GPUをGPUにもたらし、続いて2月にasync and await、3月24日にstd::threadを発表した。VectorWareのモデルでは、Rustスレッドがワープに作業を分配し、portable SIMDが各ワープ内のレーンにデータを分配する。Asyncコードはこれら両方のレベルの周りで同時操作を調整できる。

VectorWareは抽象化で競争する

Rust開発者には既にいくつかのGPUハードウェアへのルートがある。CubeCLはRustの言語拡張、コンパイラ、ランタイムを提供し、NVIDIA、AMD、Apple、Vulkan、WebGPU、CPUをターゲットにできる。NVIDIAの実験的なcuda-oxideはRustカーネルをPTXにコンパイルし、CUDAの概念をRustのAPIを通じて露出させる。

VectorWareはより広いソース互換性の命題を追っている。開発者にGPUに特化した言語拡張の内部で書くことや別個のカーネルモデルを採用させるのではなく、VectorWareはstd、スレッド、futures、core::simdのような馴染みのあるRustの機能がGPU向けにコンパイルされたときにもその意味を保持することを望んでいる。そうなれば、これらの抽象化に基づいて書かれた既存のライブラリは、構造的な変更をあまり行わずにGPUで実行可能な候補になり得る。

その違いが重要なのは、言語に慣れているだけではGPU開発が「普通」になるわけではないからだ。開発者は依然としてメモリ移動、同期、占有率(occupancy)、レーン利用率、ハードウェア固有の挙動について考える必要がある。VectorWareはその複雑さの多くをRustのコンパイラと型システムの下に置き、無効な実行形やサポートされていない操作をより早期に拒否できるようにしようとしている。

VectorWareはシャッフル、リダクション、スキャン、ギャザー、スキャッター、アトミックを含むレーンレベル操作のための型付き中間表現を構築したと述べている。その表現は実行形を記述するためにRustの型、ジェネリクス、トレイト境界を使用する。VectorWareはまたGPU挙動の差分テストのための決定論的なCPUインタプリタも構築した。

効率の制約は依然として可視的である

8月10日のデモはプロダクションのパフォーマンス結果というよりもコンパイラ上のマイルストーンだ。VectorWareの例は、portable SIMDの操作が通常のRustソースコードを保ったままGPU命令に下げられることを示している。効率的な実行はベクトル幅と操作パターンがハードウェアにどれだけ適合するかに大きく依存する。

32要素のベクターはNVIDIAのワープにきれいにマップされる。より狭いベクターはレーンを遊ばせることになる。より広いベクターは各レーンが複数の要素を処理する必要を生む。AMDハードウェアは32または64レーンのウェーブフロントを使用できるため、型に固定のNをエンコードするコードにとって別の移植性の判断が生じる。

クロスレーン操作のコストも様々だ。ハードウェアに優しいシャッフルは効率的に下げられる一方で、任意の順列は複数の命令や共有メモリを要求するかもしれない。リダクションや横方向のマスク操作は同期ポイントを導入する。VectorWareはSIMD幅がハードウェア幅と一致する場合にゼロコストのケースが発生すると述べており、これは同じソースがCPUとGPUの両方で実行できるという一般的な約束よりも狭い主張だ。

Rustのportable SIMD APIは依然として不安定で、nightlyのportable_simd機能が必要だ。VectorWareはまた、SIMDが他のRust機能と相互作用する際の安全性を保つためにコンパイラの変更が必要だったと述べている。これらの制約は、この作業を一般公開チャネルではなく実験的なコンパイラツールチェーンの領域に置いている。

VectorWareは現在NVIDIAハードウェアをターゲットにしているが、Legnittoのエンジニアは基盤となる表現がAMDのウェーブフロントやVulkanのサブグループにマップできると主張している。VectorWareはまたテンソルコアへのローワリングやコンパイラ駆動の自動ベクトル化も模索しており、将来的にはスカラーのRustループが開発者が明示的にSimd型を書かなくともワープレベル並列性を使えるようになる可能性がある。

戦略的価値は構成性にある。標準ライブラリのアクセス、非同期実行、ワープレベルのスレッド、レーンレベルのSIMDはそれぞれGPUプログラミングの異なる部分を解決する。VectorWareがこれらの抽象化をハードウェアの性能上の利点を損なうことなく一緒に機能させることができれば、LegnittoはVectorWareのローンチ時に約束したより大きなプラットフォームの基盤を手に入れることになる:GPUを主要な計算機として据え、システム開発者が既に認識しているプログラミングツールで構築されたソフトウェアだ。

Reader comments

Conversation for this story loads after sign-in.