Projek Rust CUDA, satu inisiatif yang bermatlamat untuk menjadikan Rust sebagai bahasa pengaturcaraan peringkat pertama untuk pengkomputeran GPU menggunakan toolkit CUDA daripada NVIDIA, telah dimulakan semula selepas bertahun tidak aktif. Perkembangan ini berlaku pada masa komuniti Rust sedang mencari penyelesaian yang boleh dipercayai untuk pengaturcaraan GPU, dengan hasil yang bercampur-campur di seluruh projek yang berbeza.
Projek ini bertujuan untuk menyediakan alat bagi mengkompil Rust kepada kod PTX dan pustaka untuk menggunakan pustaka CUDA yang sedia ada. Walau bagaimanapun, perbincangan komuniti mendedahkan cabaran yang ketara dan penyelesaian bersaing yang telah muncul semasa tempoh tidak aktifnya.
Sejarah Projek dan Status Semasa
Projek Rust CUDA mempunyai sejarah yang tidak stabil menurut komen pengguna. Selama bertahun-tahun, ia kekal dalam keadaan yang digambarkan oleh pengguna sebagai tidak boleh digunakan dan tidak diselenggarakan, memerlukan varian khusus yang berusia beberapa tahun untuk kedua-dua pengkompil Rust (rustc) dan CUDA untuk berfungsi dengan baik. Pengumuman permulaan semula baru-baru ini menandakan percubaan untuk menghidupkan semula projek ini, walaupun nampaknya tiada pelepasan rasmi lagi yang berfungsi dengan versi Rust dan CUDA terkini.
Tempoh tidak aktif ini telah mewujudkan jurang dalam ekosistem yang cuba diisi oleh projek-projek lain. Struktur projek ini agak luas, merangkumi pelbagai crates termasuk rustc_codegen_nvvm (backend rustc yang mensasarkan NVVM IR), cuda_std (untuk fungsi GPU), cudnn (untuk rangkaian neural dalam), dan cust (untuk ciri-ciri CUDA di bahagian CPU), antara lain.
Persaingan daripada Cudarc
Semasa Projek Rust CUDA tidak aktif, pustaka lain yang dipanggil Cudarc telah mendapat perhatian yang ketara dalam komuniti. Beberapa pengguna melaporkan kejayaan menggunakan Cudarc dalam persekitaran profesional, memuji keserasiannya dengan versi Rust dan CUDA terkini.
Ringkasnya, dari seseorang yang menggunakan CUDA pada rust dalam beberapa projek: Pustaka Cudarc diselenggarakan secara aktif, dan berfungsi dengan baik. Walau bagaimanapun, ia tidak membolehkan anda berkongsi struktur data hos dan peranti; anda akan [nyah]serialisasikan sebagai aliran bait, menggunakan fungsi yang disediakan oleh pustaka. Berfungsi pada mana-mana versi CUDA dan GPU (sekurang-kurangnya dalam beberapa tahun kebelakangan).
Perbezaan utama nampaknya adalah bahawa Cudarc memerlukan serialisasi antara struktur data hos dan peranti, manakala Projek Rust CUDA bertujuan untuk membolehkan jenis yang dikongsi antara hos dan GPU. Perbezaan ini mewakili pertukaran asas antara kebolehgunaan segera dan pengalaman pengaturcaraan yang lebih lancar.
Kebimbangan Kebebasan Platform
Perdebatan penting dalam komuniti berkisar tentang fokus eksklusif projek pada CUDA NVIDIA. Sesetengah pengguna berpendapat bahawa mengikat pengaturcaraan GPU Rust kepada teknologi satu vendor mewujudkan jalan buntu yang menghadkan penggunaan yang lebih luas di seluruh platform perkakasan yang berbeza.
Penyokong CUDA menunjukkan kepada ekosistem alat yang lebih baik, termasuk integrasi IDE, penyahpepijatan grafik, dan pustaka yang luas. Mereka berpendapat bahawa alternatif seperti OpenCL, shader pengiraan Vulkan, dan SYCL kekurangan sokongan polyglot dan pengalaman pembangun yang disediakan oleh CUDA.
Yang lain menyokong pendekatan bebas platform yang akan berfungsi di seluruh perkakasan NVIDIA, AMD, Intel, dan Apple, mencadangkan bahawa Rust harus mensasarkan perwakilan perantaraan yang kemudiannya boleh dikompil kepada pelbagai seni bina GPU. Pendekatan ini akan mengutamakan keserasian pelbagai platform berbanding pengoptimuman khusus yang ditawarkan oleh CUDA.
Pilihan Utama Pengkomputeran GPU Rust
-
Projek Rust CUDA
- Status: Baru-baru ini dihidupkan semula selepas bertahun-tahun tidak aktif
- Matlamat: Membolehkan perkongsian struktur data antara hos dan GPU
- Komponen: rustc_codegen_nvvm, cuda_std, cudnn, cust, gpu_rand, optix
- Lesen: Dwi-lesen di bawah Apache 2.0 dan MIT
-
Cudarc
- Status: Diselenggarakan secara aktif
- Keserasian: Berfungsi dengan versi Rust dan CUDA terkini
- Batasan: Memerlukan penyelarasan antara data hos dan peranti
- GitHub: https://github.com/coreylowman/cudarc
-
Projek Berkaitan Lain
- rust-gpu: Backend pengompil untuk menyusun Rust kepada SPIR-V untuk shader
- glassful (2016): Subset Rust yang boleh disusun kepada GLSL
- inspirv-rust (2017): Pengompil eksperimental Rust MIR -> SPIR-V
- nvptx (2018): Menggunakan backend LLVM PTX
- accel (2020): Perpustakaan tahap tinggi menggunakan mekanisme nvptx
- risl (2020): Pengompil eksperimental Rust -> SPIR-V
Penggunaan Industri dan Prospek Masa Depan
Perbincangan komuniti mendedahkan pandangan menarik tentang potensi minat NVIDIA dalam Rust. Seorang pengguna menyebut perbualan dengan seseorang dari pasukan CUDA Core Compute Libraries yang memberi petunjuk bahawa dalam tempoh 5 tahun akan datang, NVIDIA mungkin menyokong Rust sebagai bahasa untuk mengaturcara GPU CUDA. Seorang lagi menyatakan bahawa NVIDIA sudah menggunakan Rust dalam Dynamo, rangka kerja inferens berthroughput tinggi dan latensi rendah mereka, walaupun API awam adalah berasaskan Python.
Persoalan mengapa NVIDIA belum melabur lebih banyak dalam ekosistem Rust masih terbuka, dengan sesetengah mencadangkan bahawa syarikat mungkin menunggu untuk melihat nilai perniagaan yang mencukupi sebelum menyumbangkan sumber.
Semasa projek ini dimulakan semula, penyelenggaranya secara aktif mencari penyumbang, mengakui bahawa terdapat banyak kerja yang perlu dilakukan dan mereka semua mempunyai pekerjaan harian. Kejayaan kebangkitan ini mungkin bergantung kepada pembinaan momentum komuniti yang mencukupi untuk mengatasi cabaran teknikal yang sebelum ini menghentikan projek.
Bagi pembangun yang memerlukan keupayaan pengkomputeran GPU dalam Rust hari ini, konsensus komuniti nampaknya memihak kepada Cudarc untuk aplikasi praktikal, sambil mengawasi kemajuan Projek Rust CUDA ke arah matlamat yang lebih bercita-tinggi iaitu integrasi hos-peranti yang lancar.
Rujukan: The Rust CUDA Project