- CubeCL は、Rust で GPU カーネルを記述できるようにする高性能マルチプラットフォーム言語拡張
- 関数、ジェネリクス、構造体を完全にサポートし、トレイト、メソッド、型推論は部分的にサポート
- WGPU、CUDA、ROCm ベースのランタイムをサポートし、SIMD 命令を活用した最適化済み JIT CPU ランタイムも開発中
- 自動ベクトル化、コンパイル時最適化(Comptime)、オートチューン機能を提供し、コード性能を最大化
- Rust の手続きマクロシステムを活用して GPU カーネルコードを解析・拡張する独自の方式を採用
CubeCL 紹介
- CubeCL は Rust 言語を拡張し、GPU カーネルを直接記述できるよう支援する高性能コンピューティング向け言語拡張
- ゼロコスト抽象化を活用し、効率的で保守しやすいカーネル開発を可能にする
- 現在、関数、ジェネリクス、構造体を完全サポートし、トレイト、メソッド、型推論は部分サポート
簡単な使用例
#[cube] 属性を使って GPU で実行する関数を指定
gelu_array と gelu_scalar 関数は SIMD 命令を自動で使用して性能を向上
launch_unchecked 関数を使ってカーネルを実行可能
サポートするランタイム
- WGPU: Vulkan、Metal、DirectX、WebGPU を通じたクロスプラットフォーム GPU サポート
- CUDA: NVIDIA GPU 向け最適化をサポート
- ROCm/HIP: AMD GPU をサポート(開発中)
- JIT CPU ランタイム: Cranelift ベースの SIMD 命令を活用した最適化済み JIT CPU ランタイムを開発中
CubeCL の目標
- 高性能コンピューティングカーネルをハードウェアに依存せず記述できるよう支援
- 自動ベクトル化、Comptime、自動チューニング機能により、コードの構成可能性、再利用性、テスト容易性、保守性を向上
- メモリ管理戦略を通じて、高スループットのための最適化されたバッファ再利用を提供
- 線形代数コンポーネントを開発し、高性能かつ科学技術計算のエコシステム構築を目指す
CubeCL の動作方式
- Rust の手続きマクロシステムを活用して GPU カーネルコードを解析・拡張する独自の方式を採用
- Comptime: 元のコードを変換しないことで、コンパイル時最適化を容易に統合可能
- 自動ベクトル化: CubeCL 関数の入力をベクトル化し、各中間変数のベクトル化要素を決定
- Rust 統合: 生成されたコードは有効な Rust コードのままで、特定ランタイムへの依存なしにバンドルとして提供可能
デザインと特別機能
- CubeCL は キューブを中心に設計されており、すべてのコンピューティング API はハードウェアにマッピングされ、3D 表現を利用可能
- 自動ベクトル化: SIMD 命令を使って性能を向上でき、ベクトル化要素へカーネル内から直接アクセス可能
- Comptime: コンパイラ IR をランタイム時に変更し、最適化と柔軟性を提供
- 自動チューニング: ランタイム時に小規模ベンチマークを実行し、最適なカーネルと設定を選択
注意事項と歴史
- CubeCL は現在 アルファ版であり、まだ洗練されていない部分がある
- もともと Burn プロジェクトの WebGPU バックエンドとして始まったが
- CUDA ランタイムの追加により、汎用 IR と Rust フロントエンドへと拡張された
- CUDA と WebGPU の違いを克服するため、汎用的なコンセプトを開発した
まだコメントはありません。