NVIDIA a anunțat dezvoltarea setului de instrumente CUDA Rust, care permite limbajului Rust să dezvolte kerneluri care rulează pe GPU. Setul de instrumente asigură siguranța memoriei în timpul compilării și previne condițiile de concurență. Anul viitor, se preconizează că CUDA Rust va fi dezvoltat la un nivel potrivit pentru proiecte de producție, similar cu setul de instrumente CUDA C++ și CUDA Python.
Lanțul de instrumente CUDA Rust suportă două modele pentru dezvoltarea de kerneluri paralele: SIMT (Single Instruction, Multiple Threads - Instrucțiuni simple, fire multiple) și Tile. Modelul SIMT permite definirea la nivel scăzut a unui singur fir de execuție, lansarea și gestionarea a mii de astfel de fire de execuție. Modelul Tile oferă un nivel superior de abstractizare, unde în loc să se gestioneze explicit firele de execuție individuale, sunt definiți algoritmi pentru operarea pe blocuri de date (tile), iar compilatorul Tile IR se ocupă de toate manipulările firelor de execuție, sincronizarea accesului, gestionarea memoriei și distribuția datelor între nucleele tensoriale.
Pentru dezvoltarea în limbajul Rust folosind modelul SIMT, se dezvoltă compilatorul cuda-oxide, care permite compilarea codului în limbajul Rust, folosind sistemul de tipuri standard și modelul de proprietate Rust, direct în instrucțiuni pentru execuție în mașină virtuală CUDA PTX (Execuție de fire paralele). Nucleele GPU sunt scrise în Rust obișnuit, dar rulează într-un mediu no_std și pot utiliza doar funcții din biblioteca libcore și abstracțiuni Rust specializate, fără acces la biblioteca standard Rust (libstd).
Nucleele CUDA scrise în Rust permit utilizarea protecției de tip (sigură), utilizarea blocurilor nesigure și accesul la instrucțiuni hardware de nivel scăzut. Pentru a asigura siguranța, este propus tipul DisjointSlice, asigurând că fiecare fir de execuție are acces exclusiv doar la propriile date. Codul cuda-oxide este licențiat sub licența Apache 2.0.
Pentru a implementa modelul Tail, se propune biblioteca cutile-rs. Aceasta permite utilizarea limbajului idiomatic Rust pentru a crea cod care se compilează direct în kernel-uri CUDA. Cutile-rs aplică regulile stricte de proprietate și împrumut ale lui Rust codului care rulează pe GPU. Nucleul este implementat ca un program cu un singur fir de execuție care operează pe un bloc de date, iar compilatorul împarte automat calculul în fire de execuție și asigură sincronizarea acestora. Firelor de execuție li se acordă acces partajat la tensori imuabili, iar tensorii mutabili sunt partiționați în blocuri disjuncte pentru a asigura accesul sigur. Codul cutile-rs este distribuit sub licența Apache 2.0.
Sursa: opennet.ru
