NVIDIA mengumumkan pengembangan toolkit CUDA Rust, yang memungkinkan bahasa Rust untuk mengembangkan kernel yang berjalan di GPU. Toolkit ini memastikan keamanan memori pada waktu kompilasi dan mencegah kondisi persaingan (race condition). Tahun depan, CUDA Rust direncanakan akan dikembangkan ke tingkat yang sesuai untuk proyek produksi, serupa dengan toolkit CUDA C++ dan CUDA Python.
Toolchain CUDA Rust mendukung dua model untuk mengembangkan kernel paralel: SIMT (Single Instruction, Multiple Threads) dan Tile. Model SIMT memungkinkan definisi tingkat rendah dari satu thread, peluncuran dan pengelolaan ribuan thread tersebut. Model Tile menawarkan tingkat abstraksi yang lebih tinggi, di mana alih-alih secara eksplisit mengelola thread individual, algoritma untuk beroperasi pada blok data (tile) didefinisikan, dan kompiler Tile IR menangani semua manipulasi thread, sinkronisasi akses, manajemen memori, dan distribusi data di seluruh tensor core.
Untuk pengembangan dalam bahasa Rust menggunakan model SIMT, kompiler cuda-oxide sedang dikembangkan, yang memungkinkan kompilasi kode dalam bahasa Rust, menggunakan sistem tipe standar dan model kepemilikan Rust, langsung menjadi instruksi untuk dieksekusi. mesin virtual CUDA PTX (Parallel Thread Execution). Kernel GPU ditulis dalam Rust biasa, tetapi berjalan dalam lingkungan no_std dan hanya dapat menggunakan fungsi dari pustaka libcore dan abstraksi Rust khusus, tanpa akses ke pustaka Rust standar (libstd).
Kernel CUDA yang ditulis dalam Rust memungkinkan penggunaan proteksi tipe (aman), penggunaan blok tidak aman, dan akses ke instruksi perangkat keras tingkat rendah. Untuk memastikan keamanan, tipe DisjointSlice diusulkan, yang memastikan bahwa setiap thread hanya memiliki akses eksklusif ke datanya sendiri. Kode cuda-oxide dilisensikan di bawah lisensi Apache 2.0.
Untuk mengimplementasikan model Tail, pustaka cutile-rs diusulkan. Pustaka ini memungkinkan penggunaan bahasa idiomatik Rust untuk membuat kode yang dikompilasi langsung ke kernel CUDA. Cutile-rs menerapkan aturan kepemilikan dan peminjaman ketat Rust pada kode yang berjalan di GPU. Kernel diimplementasikan sebagai program berutas tunggal yang beroperasi pada blok data, dan kompiler secara otomatis membagi komputasi menjadi beberapa utas dan memastikan sinkronisasinya. Utas diberikan akses bersama ke tensor yang tidak dapat diubah, dan tensor yang dapat diubah dipartisi menjadi blok-blok terpisah untuk memastikan akses yang aman. Kode cutile-rs didistribusikan di bawah lisensi Apache 2.0.
Sumber: opennet.ru
