NVIDIA zaprezentowała CUDA Rust do tworzenia jąder GPU w języku Rust

Firma NVIDIA ogłosiła rozwój zestawu narzędzi CUDA Rust, który umożliwia wykorzystanie języka Rust do tworzenia jąder wykonywanych po stronie GPU. Narzędzie zapewnia bezpieczeństwo pracy z pamięcią na etapie kompilacji i zapobiega występowaniu warunków wyścigu. W przyszłym roku CUDA Rust ma osiągnąć poziom gotowości do tworzenia projektów produkcyjnych, porównywalny z zestawami narzędzi CUDA C++ i CUDA Python.

Zestaw narzędzi CUDA Rust obsługuje dwa modele tworzenia jąder wykonywanych równolegle — SIMT (Single Instruction, Multiple Threads) i Tale. Model SIMT pozwala na niskim poziomie definiować logikę pojedynczego wątku, uruchamiać tysiące takich wątków i nimi zarządzać. Model Tile oferuje wyższy poziom abstrakcji, w którym zamiast jawnego sterowania poszczególnymi wątkami definiuje się algorytmy operujące na blokach danych (tile), a wszystkie operacje na wątkach, synchronizację dostępu, zarządzanie pamięcią i rozmieszczenie danych na rdzeniach tensorowych przejmuje kompilator Tile IR.

Do programowania w języku Rust z wykorzystaniem modelu SIMT rozwijany jest kompilator cuda-oxide, który pozwala kompilować kod w języku Rust, korzystający ze standardowego systemu typów i modelu własności Rust, bezpośrednio do instrukcji wykonywanych w maszynie wirtualnej CUDA PTX (Parallel Thread Execution). Jądra dla GPU są tworzone w standardowym Rust, ale działają w środowisku no_std i mogą korzystać wyłącznie z funkcji z biblioteki libcore oraz wyspecjalizowanych abstrakcji Rust, bez dostępu do standardowej biblioteki Rust (libstd).

W jądrach CUDA tworzonych w Rust dopuszcza się stosowanie zabezpieczeń przez system typów (safe), użycie bloków unsafe oraz odwołania do niskopoziomowych instrukcji sprzętowych. W celu zapewnienia bezpieczeństwa proponowany jest typ DisjointSlice, który gwarantuje, że każdy wątek otrzymuje wyłączny dostęp wyłącznie do własnych danych. Kod cuda-oxide jest rozpowszechniany na licencji Apache 2.0.

Do wdrożenia modelu Tail proponowana jest biblioteka cutile-rs, która umożliwia użycie idiomatycznego języka Rust do tworzenia kodu kompilowanego bezpośrednio do jąder CUDA. Cutile-rs przenosi oferowane przez Rust rygorystyczne zasady własności i pożyczania na kod wykonywany na GPU. Jądro jest definiowane jako jednowątkowy program pracujący na bloku danych, a kompilator sam dzieli obliczenia na wątki i zapewnia ich synchronizację. Wątki otrzymują współdzielony dostęp do niezmiennych tensorów, natomiast do bezpiecznego dostępu do modyfikowalnych tensorów stosowany jest ich podział na nieprzecinające się bloki. Kod cutile-rs jest udostępniany na licencji Apache 2.0.

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster