7 Punkte von GN⁺ 2025-04-28 | Noch keine Kommentare. | Auf WhatsApp teilen
  • 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.

Noch keine Kommentare.