Il progetto ZLUDA ha preparato un'implementazione aperta della tecnologia CUDA per GPU AMD, consentendo di eseguire applicazioni CUDA non modificate con prestazioni simili a quelle delle applicazioni eseguite senza strati. Lo strumento pubblicato garantisce compatibilità binaria con le applicazioni CUDA esistenti, compilate con il compilatore CUDA per GPU NVIDIA. L'implementazione funziona sopra il stack ROCm in corso di sviluppo da parte di AMD e il runtime HIP (Heterogeneous-computing Interface for Portability). Il codice del progetto è scritto in Rust e distribuito sotto le licenze MIT e Apache 2.0. È supportato il funzionamento in Linux e Windows.
Il livello per organizzare il funzionamento di CUDA sui sistemi con GPU AMD è stato sviluppato negli ultimi due anni, ma il progetto ha una storia più lunga e inizialmente è stato creato per garantire il funzionamento di CUDA su GPU Intel. Il cambiamento nella politica di supporto delle GPU è spiegato dal fatto che all'inizio lo sviluppatore di ZLUDA era un dipendente di Intel, ma nel 2021 questa azienda ha considerato che fornire la possibilità di eseguire applicazioni CUDA su GPU Intel non fosse di interesse per il business e non ha accelerato lo sviluppo dell'iniziativa.
All'inizio del 2022, lo sviluppatore ha lasciato Intel e ha firmato un contratto con AMD per sviluppare un livello di compatibilità con CUDA. AMD ha chiesto durante lo sviluppo di non pubblicizzare l'interesse di AMD per il progetto ZLUDA e di non effettuare commit nel repository pubblico di ZLUDA. Dopo due anni, AMD ha deciso che l'esecuzione di applicazioni CUDA su GPU AMD non fosse di interesse per il business, il che, secondo i termini del contratto, ha permesso allo sviluppatore di rendere pubbliche le proprie lavorazioni. Poiché i produttori di GPU hanno smesso di finanziare il progetto, il suo futuro dipende ora dall'interesse della comunità e dalle proposte di collaborazione da parte di altre aziende. Senza supporto esterno, il progetto potrebbe svilupparsi solo in direzioni che interessano personalmente l'autore, come DLSS (Deep Learning Super Sampling).
Nella sua attuale forma, il livello di qualità dell'implementazione è valutato come una versione alpha. Tuttavia, ZLUDA può già essere utilizzato per eseguire molte applicazioni CUDA, inclusi Geekbench, 3DF Zephyr, Blender, Reality Capture, LAMMPS, NAMD, waifu2x, OpenFOAM e Arnold. È fornito un supporto minimo per primitiva e librerie cuDNN, cuBLAS, cuSPARSE, cuFFT, NCCL e NVML.
Il primo avvio delle applicazioni CUDA sotto ZLUDA avviene con ritardi significativi, poiché ZLUDA esegue la compilazione del codice GPU. Nei successivi avvii, questi ritardi non si verificano, poiché il codice compilato viene memorizzato nella cache. Durante l'esecuzione del codice compilato, le prestazioni sono vicine a quelle native. Eseguendo il pacchetto Geekbench su GPU AMD Radeon 6800 XT, la versione del set di test per CUDA, eseguita tramite ZLUDA, ha mostrato prestazioni notevolmente superiori rispetto alla versione basata su OpenCL.

Il supporto ufficiale per l'API del driver CUDA e le parti del API CUDA non documentate apprese tramite reverse engineering sono implementati in ZLUDA attraverso la sostituzione delle chiamate alle funzioni con funzioni analoghe fornite dal runtime HIP, che è molto simile a CUDA. Ad esempio, la funzione cuDeviceGetAttribute() viene sostituita con hipDeviceGetAttribute(). In modo simile, viene garantita la compatibilità con le librerie NVIDIA, come NVML, cuBLAS e cuSPARSE: per queste librerie, ZLUDA offre librerie di traduzione con gli stessi nomi e lo stesso insieme di funzioni, costruite come estensioni di librerie simili di AMD.
Il codice GPU delle applicazioni, compilato nella rappresentazione PTX (Parallel Thread Execution), viene traslato inizialmente da un compilatore speciale in una rappresentazione intermedia LLVM IR, sulla quale viene generato il codice binario per GPU AMD.

Fonte: opennet.ru
