Notizie
Notizie
CUDA è stato trapiantato e la GPU basata su risc-v è in riproduzione?
2022-03-17 459

RISC-V è stato uno degli argomenti più caldi nel campo dell'informatica perché questa architettura del set di istruzioni (ISA) consente un'ampia personalizzazione ed è facile da comprendere, oltre all'intero vantaggio open source e senza licenza. C'è anche un progetto per progettare una GPU generica basata sull'ISA RISC-V, e ora stiamo assistendo al porting della libreria software CUDA di Nvidia sulla piattaforma GPGPU Vortex RISC-V.


CUDA (Computing Unified Device Architecture) di Nvidia rappresenta una piattaforma informatica e un'interfaccia di programmazione delle applicazioni (API) unica che funziona sulla linea di schede grafiche di Nvidia. Quando un'applicazione viene scritta per il supporto CUDA, non appena il sistema rileva una GPU basata su CUDA, ottiene molta accelerazione GPU del codice.


Oggi i ricercatori hanno studiato un modo per abilitare il supporto del toolkit software CUDA su un progetto GPGPU RISC-V chiamato Vortex. La GPGPU Vortex RISC-V è progettata per fornire una GPU RISC-V a livello di sistema basata sull'ISA RV32IMF. Ciò significa che i core a 32 bit possono scalare da progetti GPU da 1 core a 32 core. Supporta l'API grafica OpenCL 1.2 e oggi supporta anche alcune operazioni CUDA.


I ricercatori spiegano: "...In questo progetto, proponiamo e costruiamo una pipeline per supportare la migrazione CUDA end-to-end: la pipeline accetta il codice sorgente CUDA come input e lo esegue sull'architettura GPU RISC-V estesa. Il nostro The la pipeline è composta da diversi passaggi: tradurre il codice sorgente CUDA in NVVM IR, convertire NVVM IR in SPIR-V IR, inoltrare SPIR-V IR a POCL per ottenere il binario RISC-V e infine eseguire sull'architettura di file binario GPU RISC-V estesa. "



Il processo è visualizzato nell'immagine sopra, che mostra tutti i passaggi per farlo funzionare. In termini semplici, il codice sorgente CUDA è rappresentato in un formato di rappresentazione intermedia (IR) chiamato NVVM IR, basato sul LLVM IR open source. Successivamente è stato convertito in Standard Portable Intermediate Representation (SPIR-V) IR, che è stato poi inoltrato in un'implementazione open source portatile dello standard OpenCL, chiamata POCL. Poiché Vortex supporta OpenCL, fornisce il codice supportato e può eseguirlo senza problemi.


Per maggiori dettagli su questo complesso processo, fai clic di seguito per leggere l'articolo originale. È importante sottolineare che devi ringraziare questi ricercatori per i loro sforzi per far funzionare CUDA su GPGPU RISC-V. Sebbene questo sia solo un piccolo passo per ora, potrebbe essere l'inizio di un'era in cui RISC-V viene utilizzato per accelerare le applicazioni informatiche, proprio come l'attuale gamma di GPU di Nvidia.


Lettura estesa: RISC-V può cambiare la GPU?


RISC-V può gestire le transazioni GPU? Si tratta di un lavoro in corso che può essere raggiunto creando un progetto efficiente in una piccola area con programmabilità e scalabilità personalizzate.  
  Chiunque abbia studiato l'architettura della GPU sa che questo è il costrutto SIMD di un processore vettoriale. È un processore parallelo ultra efficiente che è stato utilizzato per qualsiasi cosa, dall'esecuzione di simulazioni e fantastici giochi all'insegnamento ai robot come ottenere l'intelligenza artificiale e all'aiutare le persone intelligenti a manipolare il mercato azionario. Controlla anche la mia grammatica mentre scrivo questo.  
  Ma il campo GPU è diventato un campo privato e il suo lavoro interno è svolto dall'IP e efficace forniture di sviluppatori come AMD, Intel e Nvidia. E se ci fosse un nuovo set di istruzioni grafiche progettate per la grafica 3D e l'elaborazione multimediale? Beh, potrebbe esserci.  
  Le nuove istruzioni vengono costruite sul set di istruzioni vettoriali di base RISC-V. Aggiungeranno il supporto per nuovi tipi di dati specifici del grafico come estensioni a più livelli nello spirito del core RISC-V ISA. Supporta operazioni vettoriali, matematica precedente, pixel e texture e buffer Z/Frame. Potrebbe essere un ISA CPU-GPU fuso. Il gruppo libreria - RISC 3D lo chiama RV64X (Figura 1) perché le istruzioni saranno lunghe 64 bit (32 bit non saranno sufficienti per supportare un robusto ISA).  
 

Figura 1. Il processore grafico RV64X include più DSP oltre a unità texture e blocchi funzione dedicati.
 
  Il gruppo ha affermato che la motivazione e l'obiettivo erano creare un progetto piccolo ed efficiente con programmabilità ed estensibilità personalizzate. Dovrebbe fornire proprietà e sviluppo della proprietà intellettuale a basso costo, non competere con prodotti commerciali. Può essere implementato su target FPGA e ASIC ed è gratuito e open source. Il progetto originale è rivolto a microcontrollori a basso consumo che saranno compatibili con Khronos Vulkan e supporteranno altre API (OpenGL, DirectX, ecc.).  
               

GPU+RISC-V


L'hardware di destinazione avrà un'unità funzionale GPU e un core RISC-V. Questa combinazione si presenta sotto forma di processori in cui le istruzioni a 64 bit sono codificate come istruzioni scalari. Il punto è che il compilatore genererà istruzioni SIMD da codici operativi scalari prefissati. Altre caratteristiche includono problemi mutevoli, un backend SIMD basato su predicati; tracciabilità delle filiali; eccezioni precise; e un frontend vettoriale. I progetti includeranno una versione a virgola fissa a 16 bit e una versione a virgola mobile a 32 bit. Il primo è adatto per l'implementazione FPGA.  
  Il team ha affermato: "Non è necessario utilizzare il meccanismo di chiamata RPC/IPC per inviare chiamate API 3D allo spazio di memoria della CPU inutilizzato o dallo spazio di memoria della CPU inutilizzato allo spazio di memoria della GPU e viceversa,"  
  Il vantaggio dell'approccio ISA CPU-GPU "fuso" è che le pipeline grafiche standard possono essere utilizzate nel microcodice e possono essere supportati shader personalizzati. Può anche includere estensioni di ray tracing.  
  Il design sarà in formato Vblock (da uno sforzo della GPU Libre):  
 
  • È un po' come VLIW (ma non proprio).
  • I blocchi di istruzioni sono preceduti da contrassegni di registro che forniscono contesto aggiuntivo per le istruzioni scalari all'interno di quel blocco.
  • I sottoblocchi includono la lunghezza del vettore, la rotazione, la sovrapposizione del vettore/larghezza e la previsione.
  • Tutto questo viene aggiunto ai codici operativi scalari!
  • Non ci sono codici operativi vettoriali (né ne sono necessari).
  • In un contesto vettoriale, funziona così: se un codice operativo scalare utilizza un registro e quel registro è elencato nel contesto vettoriale, verrà attivata la modalità vettoriale.
  • L'attivazione fa sì che il ciclo for a livello hardware emetta più operazioni scalari consecutive (invece di una sola).
  • Gli implementatori sono liberi di implementare i loop nel modo che preferiscono: SIMD, multi-issue, a esecuzione singola; praticamente qualsiasi cosa.

  Il vettore RV32-V gestisce operazioni vettoriali a 8 bit, 16 bit o 32 bit/elemento da 2 a 4 elementi. Saranno inoltre fornite istruzioni dedicate per la pipeline generale di rendering grafico 3D per punti XYZW a virgola mobile e fissa a 64 bit e 128 bit. Pixel RGBA a 8, 16, 24 e 32 bit; Texel UVW a 8 e 16 bit per componente; e ambientazioni luminose e materiche (Ia, ka, Id, kd, Is, ks, ecc.).  
  Il vettore degli attributi è rappresentato come una matrice 4×4. Il sistema supporterà nativamente le matrici 2×2 e 3×3. Il supporto vettoriale può essere adatto anche per simulazioni numeriche che utilizzano tipi di dati interi a 8 bit comuni nelle applicazioni di intelligenza artificiale e di apprendimento automatico.  
  Nel progetto è possibile includere rasterizzatori personalizzati come spline, superfici SubDiv e patch. Questo metodo consente inoltre l'inclusione di fasi di pipeline personalizzate, fasi di geometria/pixel/framebuffer personalizzate, suddivisioni personalizzate e operazioni di creazione di istanze personalizzate.  
             

RV64X


L'implementazione di riferimento RV64X include:
 
 
  • Cache SRAM istruzioni/dati (32 kB)

  • Microcodice SRAM (8 kB)

  • Decodificatore di istruzioni a doppia funzione (cablato per RV32V e X; decodificatore di istruzioni microcodificato per ISA personalizzato)

  • ALU quad-vettoriale (32 bit/ALU fissa/flottante)

  • File di registro a 136 bit (elementi 1k)

  • unità con funzioni speciali

  • unità di tessitura

  • Framebuffer locale configurabile


  RV64X è un'architettura scalabile (Figura 2). Il suo metodo di fusione è nuovo, così come l'uso di registri configurabili per tipi di dati personalizzati. Il microcodice basato su SRAM definito dall'utente può essere utilizzato per implementare estensioni come fasi di rasterizzazione personalizzate, ray tracing, visione artificiale e apprendimento automatico. Un singolo progetto può essere applicato a un microcontroller grafico autonomo o a una soluzione multi-core con unità shader scalabili.  
 

Figura 2. L'RV64X può passare da un semplice design di fascia bassa (a sinistra) a una soluzione multi-core (a destra).  
  Le estensioni grafiche di RISC-V affrontano la scalabilità e il multilinguismo. Ciò consente casi d’uso di livello superiore che portano a una maggiore innovazione.  
             

Qual è il prossimo


La specifica RV64X è ancora in fase di sviluppo iniziale e soggetta a modifiche. Si sta creando un forum di discussione. L'obiettivo immediato è costruire un'implementazione di esempio utilizzando il simulatore del set di istruzioni. Questo si aprirà utilizzando le implementazioni Source IP e FPGA di IP personalizzati progettati come progetti open source.





Dichiarazione di non responsabilità: questo articolo è riprodotto da "Semiconductor Industry Observation". Questo articolo rappresenta solo l'opinione personale dell'autore, non l'opinione di Sac Micro e dell'industria, solo per la ristampa e condivisione, supporto Per proteggere i diritti di proprietà intellettuale, si prega di indicare la fonte originale e l'autore per la ristampa. In caso di violazione, contattaci per eliminarla.

whatsapp

Linea diretta di assistenza

tel: +86 755 83044319

WhatsApp

Whatsapp:+8618073002950