Schede Grafiche

NVIDIA, CUDA arriva anche su RISC-V

RISC-V è sicuramente uno degli argomenti più interessanti degli ultimi tempi inerenti al mondo dell’informatica, poiché l’Instruction Set Architecture (ISA) consente un’ampia personalizzazione ed è facile da comprendere, oltre a offrire indiscutibili vantaggi, come il fatto di essere open source e non dover pagare alcuna licenza per il suo utilizzo. C’è persino un progetto che ha realizzato una GPU generica basata su RISC-V ISA, e ora stiamo assistendo a un port della libreria software CUDA di NVIDIA sulla piattaforma Vortex RISC-V GPGPU.

Credit: NVIDIA
NVIDIA GPU

CUDA (Compute Unified Device Architecture) rappresenta una piattaforma di elaborazione e un’Application Programming Interface (API) unica che viene eseguita sulla linea di schede grafiche di NVIDIA. Quando le applicazioni sono dotate di supporto CUDA, è possibile svolgere operazioni più velocemente sulle GPU compatibili. Recentemente, i ricercatori hanno esaminato un modo per abilitare il supporto del toolkit software CUDA su un progetto RISC-V GPGPU chiamato Vortex. Il Vortex RISC-V GPGPU mira a fornire una GPU RISC-V basata sull’ISA RV32IMF. Ciò significa core a 32 bit che possono essere scalati in un design GPU da 1 a 32 core. Supporta l’API grafica OpenCL 1.2 e oggi anche alcune istruzioni CUDA.

I ricercatori hanno affermato:

…in questo progetto proponiamo e costruiamo una pipeline per supportare una migrazione CUDA end-to-end: la pipeline accetta i codici sorgente CUDA come input e li esegue su un’architettura GPU RISC-V estesa. La nostra pipeline consiste in diversi passaggi: traduce il codice sorgente CUDA in NVVM IR, converte NVVM IR in SPIR-V IR, inoltra SPIR-V IR in POCL per ottenere il file binario RISC-V e infine esegue il file binario su una architettura GPU RISC-V estesa.

Credit: arXiv:2109.00673
NVIDIA CUDA RISC-V

Questo processo è visualizzato nel grafico qui sopra, che mostra tutti i passaggi per farlo funzionare. In pratica, il codice sorgente CUDA viene fornito nel formato di rappresentazione intermedia (IR) chiamato NVVM IR. Successivamente viene convertito in Standard Portable Intermediate Representation (SPIR-V) IR e successivamente viene inoltrato nell’implementazione open source dello standard OpenCL chiamata POCL. Poiché Vortex supporta OpenCL, è anche in grado di eseguire il codice senza problemi. Nel caso foste interessati, trovate ulteriori dettagli su questo complicato processo in questo documento.