tracel-ai/cubecl

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

何を解決するか

CubeCLは、多様なハードウェア上で高パフォーマンスなコンピュートカーネルを書くことの難しさに対処します。従来、開発者は異なるGPU(NVIDIA用CUDA、AMD用HIP、Apple用Metal)およびCPU用に別々のコードを書く必要があり、またはパフォーマンスのピークを犠牲にする可能性のある高レベルな抽象化を使用する必要がありました。CubeCLは、Rustで1つのカーネルを書くだけで、複数のバックエンド上で最適化された形で実行されるように変換できるようにします。

動作方法

CubeCLはRust言語拡張および即時コンパイラ(JIT)として機能します。#[cube]マクロを使用してRust関数を中間表現(IR)であるplironに変換し、その後、PTX、MSL、SPIR-V、WGSLなどのプラットフォーム固有の言語にコンパイルします。

ハードウェアの並列性を4つのレベルに整理しています:

  • Unit:個々のレジスタ(スレッド/呼び出し)。
  • Plane:同期実行命令(ワープ/サブグループ)。
  • Cube:共有メモリ(ブロック/ワークグループ)。
  • Hypercube:複数のキューブにまたがるグローバルメモリ。

対象ユーザー

低レベルのコンピュートカーネル、科学計算ライブラリ、ディープラーニングフレームワーク(例:Burn)を開発する開発者向けです。異なるGPU/CPUベンダー用に複数の別々のコードベースを維持せずに、最大限のハードウェアパフォーマンスを実現したい方々に最適です。

特徴

  • 単一コードベース:Rustでカーネルを書き、CUDA、HIP、Metal、Vulkan、WebGPU、CPUにデプロイ可能。
  • 自動ベクトル化:Vector<F, N>型を使用し、幅Nを実行時に決定してネイティブSIMD命令に低レベル化。
  • Comptime:最初のコンパイル時にコンパイラIRを変更することで、特定のハードウェア命令、形状、ループ展開にカーネルを最適化可能。
  • 自動チューニング:実行時に異なるカーネル設定をベンチマークし、現在のデバイスに最もパフォーマンスが高いバージョンを自動選択。
  • Rust統合:カーネルはRustコンパイラによって型チェックおよび借用チェックが行われ、cargo testでCPU上でテスト可能。

関連

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