NVIDIA ha presentato CUDA Rust per lo sviluppo di kernel GPU in Rust

NVIDIA ha annunciato lo sviluppo del toolkit CUDA Rust, che consente di usare il linguaggio Rust per sviluppare kernel eseguiti lato GPU. Il toolkit garantisce la sicurezza nell'uso della memoria in fase di compilazione e previene il verificarsi di race condition. Il prossimo anno CUDA Rust dovrebbe raggiungere un livello adatto allo sviluppo di progetti reali, analogo a quello di CUDA C++ e CUDA Python.

Il toolkit CUDA Rust supporta due modelli per lo sviluppo di kernel eseguiti in parallelo: SIMT (Single Instruction, Multiple Threads) e Tale. Il modello SIMT consente di definire a basso livello la logica di un singolo thread, avviare migliaia di thread di questo tipo e gestirli. Il modello Tile offre un livello di astrazione più elevato: invece di controllare esplicitamente i singoli thread, si definiscono gli algoritmi di elaborazione di blocchi di dati (tile), mentre tutte le operazioni sui thread, la sincronizzazione degli accessi, la gestione della memoria e la distribuzione dei dati sui tensor core vengono demandate al compilatore Tile IR.

Per lo sviluppo in Rust con il modello SIMT è in evoluzione il compilatore cuda-oxide, che consente di compilare codice Rust, basato sul sistema di tipi nativo e sul modello di ownership di Rust, direttamente in istruzioni per l'esecuzione in macchina virtuale CUDA PTX (Parallel Thread Execution). I kernel per GPU vengono creati in Rust standard, ma vengono eseguiti in un ambiente no_std e possono utilizzare solo funzioni della libreria libcore e astrazioni Rust specializzate, senza accesso alla libreria standard di Rust (libstd).

Nei kernel CUDA in Rust è consentito applicare le garanzie offerte dal sistema di tipi (safe), usare blocchi unsafe e accedere a istruzioni hardware di basso livello. Per garantire la sicurezza viene proposto il tipo DisjointSlice, che assicura che ogni thread ottenga un accesso esclusivo solo ai propri dati. Il codice di cuda-oxide è distribuito con licenza Apache 2.0.

Per applicare il modello Tail viene proposta la libreria cutile-rs, che consente di usare il linguaggio idiomatico Rust per creare codice compilato direttamente in kernel CUDA. Cutile-rs applica al codice eseguito sulla GPU le rigorose regole di ownership e borrowing previste da Rust. Il kernel viene definito come un programma a thread singolo che opera su un blocco di dati, mentre il compilatore suddivide autonomamente i calcoli in thread e ne garantisce la sincronizzazione. Ai thread viene fornito accesso condiviso ai tensori immutabili, mentre per l'accesso sicuro ai tensori mutabili si utilizza la loro suddivisione in blocchi non sovrapposti. Il codice di cutile-rs è distribuito con licenza Apache 2.0.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS - ProHoster