- C++で手軽に汎用GPUコンピューティングを可能にする軽量ライブラリ
- WebGPU仕様を利用して低レベルのGPUインターフェースを提供することで、さまざまなGPUで動作可能なコードを書けるようにする
- つまり、C++プロジェクトにGPUコードを組み込み、Nvidia、Intel、AMD などのGPUで実行できるようになり、Vulkan、Metal、DirectXをサポートする大半のハードウェアで同じC++コードによるGPU活用が可能になる
技術的目標: 軽量化、高速な開発反復、少ないボイラープレートコード
- 最小限のAPIでGPUコンピューティングに必要な全範囲を扱うことを目標とする
- プロジェクトのビルドがほぼ即座に行われ、コンパイル/実行サイクルが5秒未満になることを目指す
- 標準C++コンパイラ以外の依存関係やツーリングの負担を最小化
- 小さなAPI表面積と最小限のボイラープレートコードを志向し、抽象化レイヤーを最小限に抑えて gpu.cpp ライブラリと WebGPU API の対応関係が明確になるように実装
- Google の Dawn WebGPU 実装の pre-built バイナリを提供することでコンパイル時間を短縮
- 現時点では Dawn バックエンドのみをサポートするが、今後は他の WebGPU 実装もサポート予定
gpu.cppの対象ユーザー
- 個人向けコンピューティング機器で高い移植性を持つGPUコンピューティングが必要なプロジェクトが主な対象
- GPUアルゴリズム開発、ニューラルネットワークモデルの直接実装、物理シミュレーション、マルチモーダルアプリケーション、オフライングラフィックスレンダリング、機械学習推論エンジンなどに活用可能
- 個人向け機器での広範なGPUコンピューティングをより簡単にすることが目標
- 細かなデータ移動とGPUコード制御を直接行えるようにする
gpu.cppではないもの
- 高水準の数値計算や機械学習フレームワーク、推論エンジンではない(そのような実装を支えるために使うことはできる)
- WebGPU は Web ブラウザだけでなくネイティブ実装もある点が重要("WebGPU is Not Just About the Web")
- レンダリング/グラフィックスよりも汎用GPUコンピューティングに重点を置いている
制限事項と今後の計画
- API 改善: ユースケースを通じて API デザインを発展させていく予定
- ブラウザターゲットをサポート予定
- 再利用可能なカーネルとシェーダーのライブラリ化
- さらに多くの使用例とテストを追加
- llm.c のカーネルを WebGPU で実装することが短期目標の一つ
1件のコメント
プロジェクトの紹介については、gpu.cpp: portable GPU compute for C++ with WebGPU のほうがもう少し詳しいです。