- CubeCL adalah ekstensi bahasa multiplatform berperforma tinggi yang memungkinkan penulisan kernel GPU di Rust
- Mendukung penuh fungsi, generik, dan struct, serta mendukung sebagian trait, method, dan inferensi tipe
- Mendukung runtime berbasis WGPU, CUDA, dan ROCm, serta sedang mengembangkan runtime CPU JIT teroptimasi yang memanfaatkan instruksi SIMD
- Menyediakan fitur vektorisasi otomatis, optimisasi waktu kompilasi (comptime), dan autotune untuk memaksimalkan performa kode
- Menggunakan pendekatan unik yang memanfaatkan sistem procedural macro Rust untuk mem-parsing dan memperluas kode kernel GPU
Pengenalan CubeCL
- CubeCL adalah ekstensi bahasa komputasi berperforma tinggi yang memperluas bahasa Rust untuk mendukung penulisan kernel GPU secara langsung
- Memanfaatkan abstraksi zero-cost untuk memungkinkan pengembangan kernel yang efisien dan mudah dipelihara
- Saat ini mendukung penuh fungsi, generik, dan struct, sementara trait, method, dan inferensi tipe didukung sebagian
Contoh penggunaan sederhana
- Menggunakan atribut
#[cube] untuk menentukan fungsi yang akan dijalankan di GPU
- Fungsi
gelu_array dan gelu_scalar secara otomatis menggunakan instruksi SIMD untuk meningkatkan performa
- Kernel dapat dijalankan menggunakan fungsi
launch_unchecked
Runtime yang didukung
- WGPU: dukungan GPU lintas platform melalui Vulkan, Metal, DirectX, dan WebGPU
- CUDA: dukungan optimasi untuk GPU NVIDIA
- ROCm/HIP: dukungan untuk GPU AMD (sedang dikembangkan)
- Runtime CPU JIT: sedang mengembangkan runtime CPU JIT teroptimasi berbasis Cranelift yang memanfaatkan instruksi SIMD
Tujuan CubeCL
- Mendukung penulisan kernel komputasi berperforma tinggi tanpa terikat pada perangkat keras tertentu
- Meningkatkan kemampuan penyusunan, penggunaan ulang, pengujian, dan pemeliharaan kode melalui fitur vektorisasi otomatis, comptime, dan penalaan otomatis
- Menyediakan penggunaan ulang buffer yang dioptimalkan untuk throughput tinggi melalui strategi manajemen memori
- Bertujuan membangun ekosistem komputasi berperforma tinggi dan komputasi ilmiah dengan mengembangkan komponen aljabar linear
Cara kerja CubeCL
- Menggunakan pendekatan unik yang memanfaatkan sistem procedural macro Rust untuk mem-parsing dan memperluas kode kernel GPU
- Comptime: dapat dengan mudah mengintegrasikan optimisasi waktu kompilasi tanpa mengubah kode sumber asli
- Vektorisasi otomatis: memvektorisasi input fungsi CubeCL untuk menentukan elemen vektorisasi dari setiap variabel perantara
- Integrasi Rust: kode yang dihasilkan tetap berupa kode Rust yang valid dan dapat dibundel tanpa ketergantungan pada runtime tertentu
Desain dan fitur khusus
- CubeCL dirancang dengan berpusat pada cube, dan semua API komputasi dipetakan ke perangkat keras sehingga dapat menggunakan representasi 3D
- Vektorisasi otomatis: dapat meningkatkan performa dengan menggunakan instruksi SIMD, dan elemen vektorisasi dapat diakses langsung di dalam kernel
- Comptime: memberikan optimisasi dan fleksibilitas dengan memodifikasi IR compiler saat runtime
- Penalaan otomatis: memilih kernel dan konfigurasi optimal dengan menjalankan benchmark kecil saat runtime
Catatan dan riwayat
- CubeCL saat ini berada pada versi alfa, sehingga masih ada bagian yang belum matang
- Awalnya dimulai sebagai backend WebGPU untuk proyek Burn
- Lalu diperluas menjadi IR umum dan frontend Rust dengan menambahkan runtime CUDA
- Mengembangkan konsep umum untuk mengatasi perbedaan antara CUDA dan WebGPU
Belum ada komentar.