Compania NVIDIA a anunțat dezvoltarea instrumentelor CUDA Rust, care permit utilizarea limbajului Rust pentru dezvoltarea de nuclee care rulează pe GPU. Instrumentele asigură siguranța gestionării memoriei în timpul compilării și previn apariția stărilor de concurență. În anul următor, CUDA Rust urmează să fie adus la un nivel adecvat pentru dezvoltarea proiectelor de lucru, similar instrumentelor CUDA C++ și CUDA Python.
Instrumentele CUDA Rust suportă două modele de dezvoltare de nuclee executate în paralel - SIMT (Single Instruction, Multiple Threads) și Tile. Modelul SIMT permite definirea logicii unui singur fir la un nivel scăzut, lansând mii de astfel de fire și gestionându-le. Modelul Tile oferă un nivel mai înalt de abstractizare, în care, în loc de a gestiona firesc firele individuale, se definesc algoritmi de acțiune cu blocuri de date (tile), iar toate manipulările cu fire, sincronizarea accesului, gestionarea memoriei și distribuția datelor către nuclee tensoriale sunt preluate de compilatorul Tile IR.
Pentru dezvoltarea în limbajul Rust folosind modelul SIMT, se dezvoltă compilatorul cuda-oxide, care permite compilarea codului în limbajul Rust, utilizând sistemul standard de tipuri și modelul de proprietate Rust, direct în instrucțiuni pentru a fi executate în mașina virtuală CUDA PTX (Parallel Thread Execution). Nuclee pentru GPU sunt create în Rust obișnuit, dar rulează într-un mediu no_std și pot utiliza doar funcții din biblioteca libcore și abstrații specializate Rust, fără acces la biblioteca standard Rust (libstd).
În nuclee CUDA scrise în Rust, este permisă aplicarea protecției prin sistemul de tipuri (safe), utilizarea blocurilor unsafe și apelarea instrucțiunilor hardware la un nivel scăzut. Pentru a asigura siguranța, se propune tipul DisjointSlice, care garantează că fiecare fir are acces exclusiv doar la datele sale. Codul cuda-oxide este distribuit sub licența Apache 2.0.
Pentru aplicarea modelului Tail, se propune biblioteca cutile-rs, care permite utilizarea unui limbaj idiomatic Rust pentru a crea cod ce se compilează direct în nuclee CUDA. Cutile-rs aplică regulile stricte de proprietate și împrumut propuse în Rust pentru codul executat pe GPU. Nucleul este structurat ca un program unifilar care lucrează cu un bloc de date, iar compilatorul își împarte automat calculele în fire și asigură sincronizarea acestora. Firele au acces comun la tensori imuabili, iar pentru accesul sigur la tensori modificabili, aceștia sunt împărțiți în blocuri neintersectante. Codul cutile-rs este distribuit sub licența Apache 2.0.
Sursa: opennet.ro
