tracel-ai/cubecl

Multi-platform high-performance compute language extension for Rust.

何を解決するか

CubeCLは、Rustで一度だけ高性能なコンピュートカーネルを記述し、NVIDIA、AMD、Apple、Vulkan、WebGPU、CPUなど複数のハードウェアプラットフォームで実行できるようにする仕組みを提供します。CUDAやWGSLなどの異なるシェーダ言語で別々のコードを書く必要がありません。

動作方法

これはRust言語拡張および即時(JIT)コンパイラとして機能します。#[cube]属性を使用することで、Rust関数を中間表現(IR)に変換し、必要に応じてターゲットプラットフォームのネイティブ言語(例:CUDA C++、HIP、Metal、SPIR-V)にコンパイルします。

多様なハードウェアで最高のパフォーマンスを維持するために、4軸並列モデル(Vector、Plane、CubeDim、CubeCount)を採用しており、ワープサイズなどの特定のハードウェア定数にハードコードされるのではなく、カーネルを適応可能にしています。

対象ユーザー

科学計算ライブラリ、ディープラーニングフレームワーク(例:Burn)、高性能コンピュートカーネルを開発する開発者向けです。低レベルのGPU/CPUプログラミングのパフォーマンスを犠牲にすることなく、Rustの安全性と組み合わせのしやすさを享受したい方におすすめです。

特徴

  • マルチプラットフォーム対応:CUDA、HIP、Metal、SPIR-V、WGSL、CPU SIMDにコンパイル可能。
  • コンパイル時(comptime):最初のコンパイル時にコンパイラIRを変更することで、命令の特殊化やループ展開が可能。
  • 自動チューニング:実行時に異なるカーネル設定をベンチマークし、現在のハードウェアに最適なバージョンを自動的に検出。
  • 自動ベクトル化:高レベルのベクトル型をプラットフォームのネイティブSIMD命令に下げる際、自動的にブロードキャストを処理。
  • JITコンパイル:実際に起動された特定のカーネルバリアントのみをコンパイルするため、事前コンパイルに比べてバイナリサイズを削減。

関連

  • プロジェクト
  • Dispatch
  • プロジェクト
  • プロジェクト
  • プロジェクト