- CubeCL ist eine leistungsstarke plattformübergreifende Spracherweiterung, mit der sich GPU-Kernel in Rust schreiben lassen
- Funktionen, Generics und Structs werden vollständig unterstützt, Traits, Methoden und Typherleitung teilweise
- Unterstützt Laufzeiten auf Basis von WGPU, CUDA und ROCm; zusätzlich wird eine optimierte JIT-CPU-Laufzeit mit SIMD-Instruktionen entwickelt
- Bietet Auto-Vektorisierung, Compile-Time-Optimierung (Comptime) und Auto-Tuning, um die Code-Performance zu maximieren
- Verwendet einen einzigartigen Ansatz auf Basis von Rusts prozeduralem Makro-System, um GPU-Kernel-Code zu parsen und zu erweitern
Einführung in CubeCL
- CubeCL ist eine Erweiterung der Sprache Rust für High-Performance-Computing, die das direkte Schreiben von GPU-Kerneln ermöglicht
- Nutzt Zero-Cost-Abstraktionen, um eine effiziente und wartungsfreundliche Kernel-Entwicklung zu ermöglichen
- Derzeit werden Funktionen, Generics und Structs vollständig unterstützt, während Traits, Methoden und Typherleitung teilweise unterstützt werden
Einfaches Anwendungsbeispiel
- Mit dem Attribut
#[cube] werden Funktionen markiert, die auf der GPU ausgeführt werden
- Die Funktionen
gelu_array und gelu_scalar nutzen automatisch SIMD-Instruktionen zur Leistungssteigerung
- Kernel können mit der Funktion
launch_unchecked ausgeführt werden
Unterstützte Laufzeiten
- WGPU: Plattformübergreifende GPU-Unterstützung über Vulkan, Metal, DirectX und WebGPU
- CUDA: Optimierte Unterstützung für NVIDIA-GPUs
- ROCm/HIP: Unterstützung für AMD-GPUs (in Entwicklung)
- JIT-CPU-Laufzeit: Entwicklung einer optimierten JIT-CPU-Laufzeit auf Cranelift-Basis mit SIMD-Instruktionen
Ziele von CubeCL
- Unterstützung beim Schreiben von High-Performance-Computing-Kerneln unabhängig von der Hardware
- Verbesserung von Konfigurierbarkeit, Wiederverwendbarkeit, Testbarkeit und Wartbarkeit des Codes durch Auto-Vektorisierung, Comptime und Auto-Tuning
- Bereitstellung optimierter Buffer-Wiederverwendung für hohen Durchsatz durch Strategien für das Speichermanagement
- Aufbau eines Ökosystems für High-Performance- und wissenschaftliches Rechnen durch die Entwicklung von Komponenten für lineare Algebra
Funktionsweise von CubeCL
- Verwendet einen einzigartigen Ansatz auf Basis von Rusts prozeduralem Makro-System, um GPU-Kernel-Code zu parsen und zu erweitern
- Comptime: Compile-Time-Optimierungen lassen sich leicht integrieren, da der Quellcode nicht transformiert wird
- Auto-Vektorisierung: Die Eingaben von CubeCL-Funktionen werden vektorisiert, um die Vektorisierungselemente jeder Zwischenvariable zu bestimmen
- Rust-Integration: Der erzeugte Code bleibt gültiger Rust-Code und kann ohne Abhängigkeit von einer bestimmten Laufzeit als Bundle bereitgestellt werden
Design und besondere Funktionen
- CubeCL ist rund um Cubes entworfen; alle Computing-APIs werden auf die Hardware abgebildet, sodass eine 3D-Darstellung genutzt werden kann
- Auto-Vektorisierung: Kann die Performance durch SIMD-Instruktionen steigern, und auf Vektorisierungselemente kann direkt im Kernel zugegriffen werden
- Comptime: Modifiziert den Compiler-IR zur Laufzeit und bietet so Optimierung und Flexibilität
- Auto-Tuning: Führt zur Laufzeit kleine Benchmarks aus, um den optimalen Kernel und die beste Konfiguration auszuwählen
Hinweise und Geschichte
- CubeCL befindet sich derzeit in einer Alpha-Version und enthält noch unausgereifte Bereiche
- Ursprünglich begann es als WebGPU-Backend des Projekts Burn
- Mit der Ergänzung einer CUDA-Laufzeit wurde es zu einem allgemeinen IR und einem Rust-Frontend erweitert
- Es wurden allgemeine Konzepte entwickelt, um die Unterschiede zwischen CUDA und WebGPU zu überbrücken
Noch keine Kommentare.