- CubeCL, Rust içinde GPU çekirdekleri yazmayı sağlayan yüksek performanslı, çok platformlu bir dil uzantısıdır
- Fonksiyonlar, generics ve struct'lar tam olarak desteklenir; trait'ler, metotlar ve tip çıkarımı ise kısmen desteklenir
- WGPU, CUDA, ROCm tabanlı runtime'ları destekler; ayrıca SIMD komutlarını kullanan optimize edilmiş bir JIT CPU runtime'ı da geliştirilmektedir
- Otomatik vektörleştirme, derleme zamanı optimizasyonu (Comptime), autotune özellikleri sunarak kod performansını en üst düzeye çıkarır
- Rust'ın procedural macro sistemini kullanarak GPU çekirdek kodunu ayrıştırıp genişleten benzersiz bir yaklaşım kullanır
CubeCL'e giriş
- CubeCL, Rust dilini genişleterek GPU çekirdeklerini doğrudan yazmayı destekleyen yüksek performanslı bir hesaplama dili uzantısıdır
- Sıfır maliyetli soyutlamalar kullanarak verimli ve bakımı kolay çekirdek geliştirmeyi mümkün kılar
- Şu anda fonksiyonlar, generics ve struct'lar tam olarak desteklenmektedir; trait'ler, metotlar ve tip çıkarımı ise kısmen desteklenmektedir
Basit kullanım örneği
- GPU'da çalışacak fonksiyonlar
#[cube] attribute'u ile belirtilir
gelu_array ve gelu_scalar fonksiyonları, performansı artırmak için SIMD komutlarını otomatik olarak kullanır
- Çekirdekler
launch_unchecked fonksiyonu ile çalıştırılabilir
Desteklenen runtime'lar
- WGPU: Vulkan, Metal, DirectX ve WebGPU üzerinden çapraz platform GPU desteği
- CUDA: NVIDIA GPU'lar için optimize destek
- ROCm/HIP: AMD GPU desteği (geliştirme aşamasında)
- JIT CPU runtime'ı: Cranelift tabanlı SIMD komutlarını kullanan optimize edilmiş bir JIT CPU runtime'ı geliştirilmektedir
CubeCL'in hedefleri
- Yüksek performanslı hesaplama çekirdeklerinin donanıma bağlı kalmadan yazılmasını desteklemek
- Otomatik vektörleştirme, comptime ve otomatik ayarlama ile kodun yapılandırılabilirliğini, yeniden kullanılabilirliğini, test edilebilirliğini ve bakım kolaylığını artırmak
- Bellek yönetimi stratejileri ile yüksek aktarım hacmi için optimize edilmiş buffer yeniden kullanımını sağlamak
- Lineer cebir bileşenleri geliştirerek yüksek performanslı ve bilimsel hesaplama ekosistemi oluşturmak
CubeCL nasıl çalışır
- Rust'ın procedural macro sistemi kullanılarak GPU çekirdek kodu ayrıştırılır ve genişletilir; bu, benzersiz bir yaklaşımdır
- Comptime: Kaynak kod dönüştürülmediği için derleme zamanı optimizasyonları kolayca entegre edilebilir
- Otomatik vektörleştirme: CubeCL fonksiyonlarının girdileri vektörleştirilir ve her ara değişkenin vektörleştirme öğesi belirlenir
- Rust entegrasyonu: Üretilen kod geçerli Rust kodu olarak kalır ve belirli bir runtime'a bağımlı olmadan bundle olarak sunulabilir
Tasarım ve özel özellikler
- CubeCL, cube merkezli tasarlanmıştır; tüm hesaplama API'leri donanıma eşlenerek 3D gösterimi kullanabilir
- Otomatik vektörleştirme: SIMD komutlarıyla performans artırılabilir ve vektörleştirme öğelerine çekirdek içinde doğrudan erişilebilir
- Comptime: Derleyici IR'si runtime sırasında değiştirilerek optimizasyon ve esneklik sağlar
- Otomatik ayarlama: Runtime sırasında küçük benchmark'lar çalıştırılarak en uygun çekirdek ve ayarlar seçilir
Dikkat edilmesi gerekenler ve geçmişi
- CubeCL şu anda alfa sürümündedir ve hâlâ cilalanmamış bölümler içerir
- Başlangıçta Burn projesinin WebGPU backend'i olarak başladı
- Daha sonra CUDA runtime'ının eklenmesiyle genel amaçlı bir IR ve Rust frontend'ine genişletildi
- CUDA ile WebGPU arasındaki farkları aşmak için genel kavramlar geliştirildi
Henüz yorum yok.