RV32X: la variante RISC-V che consentirà schede grafiche open source

Il mercato dei processori grafici o GPU, sia sotto forma di schede grafiche che di GPU integrate, è attualmente occupato da NVIDIA, AMD e in misura minore Intel. Significa che non è possibile costruire un file GPU che non utilizza la tecnologia commerciale? La soluzione può arrivare nell'utilizzo dell'ISA RISC-V totalmente gratuito e aperto, in una variante pensata per la grafica con il nome RV32X

Le persone di Pixilica, i creatori del CPU sulla base dell'ISA RISC-V chiamato SiFive hanno fatto una proposta chiamata RV32X, che mira a creare GPU utilizzando l'ISA RISC-V. Che per la natura completamente gratuita e aperta di RISC-V potrebbe cambiare completamente il futuro delle GPU.

RV32X

RV32X, applicando RISC-V per costruire una GPU

Lo standard RISC-V è un insieme completamente gratuito e aperto di registri e istruzioni per l'uso che si basa su una specifica di base e una serie di estensioni opzionali per la creazione di CPU per diversi tipi di usi e utilità. Ma è possibile utilizzare RISC-V per creare shader unit come gli SM di NVIDIA o le Compute Unit di AMD? Non per cominciare e una nuova estensione di detto ISA sarebbe necessaria per usarlo per creare un'unità shader.

L'azienda Pixilica ha proposto la realizzazione di una GPU dove le unità shader sono basate sull'ISA RISC-V e per questo ha proposto un'ulteriore estensione all'ISA RISC-V con una serie di istruzioni che permettono di manipolare primitive grafiche. Che si tratti di pixel, vertici e altri tipi di dati utilizzati nel rendering grafico in tempo reale.

Per fare ciò, propongono di utilizzare l'estensione V per le istruzioni vettoriali RISC-V e di espandere l'elenco delle istruzioni da essa per creare l'unità shader.

Quali sono i componenti di un'unità Shader?

SM NVIDIA Ampere

Ogni unità shader, indipendentemente dal marchio di cui parliamo, ha i seguenti componenti:

  • Un decoder, scheduler che prende le onde dei thread di esecuzione e le organizza.
  • Un pozzo di registri, su cui il pianificatore colloca in modo ordinato i thread che devono essere eseguiti dalle ALU o unità di esecuzione.
  • ALU o unità di esecuzione con la capacità di eseguire operazioni aritmetiche e logiche sui dati. Questi possono essere vettoriali o SIMD e scalari.
  • Unità texture per eseguire l'interpolazione dei pixel della texture. Queste unità hanno una funzione fissa.
  • Cache di primo livello per i dati
  • Possibilità di esportare i dati dalla cache dei dati a livelli più alti della cache, ma più lontani dall'unità shader, e anche di esportarli nel ROPS
  • Una cache di istruzioni che può essere interna a ciascuna unità shader o condivisa tra più unità.

Una volta conosciuti gli elementi base comuni, diamo uno sguardo alla proposta di Pixilica.

RV32X, un'unità Shader basata su RISC-V

RV32X

La prima cosa che dobbiamo tenere a mente è che lo standard per i vettori in RISC-V supporta fino a 128 bit, che possono essere implementati come segue: 1 operazione a 128 bit, 2 64 bit, 4 32 bit, 8 16 bit o 16 8 bit. Chiamiamo questa capacità di dimezzare la precisione in qualsiasi ALU come SIMD sovraregistrata. Anche se nel caso in questione, la proposta è di posizionare 4 ALU a 32 bit in virgola mobile.

L'altro tipo di unità sono le cosiddette unità di funzione speciale, che nel progetto saranno scalari e con una precisione intera di 16 bit. Le istruzioni che avrebbero eseguito sarebbero le chiamate trascendentali. Cioè, seno, coseno, tangente, potenze, logaritmi e radici di diversi gradi. Difficili da implementare in un'unità SIMD a causa del costo dei transistor.

Processore

Una differenza rispetto alle unità SIMD utilizzate in una CPU sarebbe che i registri non sarebbero 128 bit, ma 136 bit, dove i primi 8 bit servirebbero a definire il tipo di primitiva grafica o di dati da elaborare. Gli 8 bit consentono fino a 256 tipi di dati, quindi c'è un ampio margine per definirli, alcuni dei tipi di dati consentono di interagire con le diverse unità di funzioni fisse presenti nella GPU, oltre che con la VRAM.

In totale abbiamo circa 4 pozzetti di registro, ciascuno dei quali 1024 elementi diversi di 136 bit ciascuno, che è attualmente il blocco massimo di thread di esecuzione in API come Direct3D all'interno di DirectX. Ciascuno dei passi d'uomo è collegato a un'unità SIMD a virgola mobile a 4 bit 32-ALU. Ciò si traduce in 16 ALU per pozzetto, il che sarebbe confermato dal supporto delle istruzioni con matrici di elementi 4 x 4.

Istruzioni per la decodifica sull'RV32X

SoC PS5

La decodifica delle istruzioni avverrebbe in un decodificatore a funzione fissa. Si tenga presente che le istruzioni sarebbero lunghe 32 bit e quindi di dimensione fissa. Questi sarebbero arrivati ​​attraverso la cache delle istruzioni, mentre i dati per ciascuna istruzione sarebbero anche nella cache dei dati all'interno dell'unità di calcolo. È anche possibile l'uso di un decodificatore di istruzioni microcodice.

La proposta prevede l'integrazione di un core RISC-V standard a corredo dell'RV32X, il che non significa che diventi una tipica CPU, ma piuttosto che sarebbe utilizzato per integrare l'esecuzione Round-Robin tipica delle GPU, che si basa sul dare ogni istruzione un tempo di esecuzione. Se non viene eseguito nel tempo specificato, di solito a causa della mancanza di dati. Quindi torna indietro nell'elenco.

Si deve tener conto che le ALU delle unità shader eseguono le istruzioni dei diversi thread di esecuzione in cascata man mano che arrivano dai registri. Quando lo scheduler ha riempito i registri con i dati delle cache di dati e le istruzioni quando sono azionati dalle ALU come se fossero uno stack, una volta che un gruppo di istruzioni è stato risolto, le ALU leggono il gruppo successivo, finché tutte non hanno attraversato log e non ci sono thread da eseguire.

Funzione fissa su RV32X

Potenzia il nucleo solista

Le unità a funzione fissa allo stesso modo del resto degli acceleratori non sono definite nell'RV32X, ma le istruzioni che consentono l'interazione con esse dalle unità Shader lo sono. Queste unità sono responsabili di svolgere sempre la stessa funzione, poiché è cablata o utilizza un microcodice fisso, ma in ogni caso sarebbero unità completamente separate dall'RV32X per la maggior parte.

Pertanto, ogni produttore avrebbe le proprie unità funzionali fisse e la loro implementazione. Oltre a creare estensioni proprietarie nel caso in cui queste avessero implementato funzioni aggiuntive sul funzionamento comune delle stesse. Tieni presente che l'RV32X non definisce una GPU completa ma piuttosto un'unità shader che fa parte di una GPU, il che è importante perché esegue i diversi tipi di shader, ma non è l'intera GPU.

Come nota, in termini di unità di trama ne abbiamo una per tombino. Tieni presente che il normale rapporto tra ALU nelle unità SIMD è di solito 16: 1 nella maggior parte delle GPU. All'interno di ciascuna unità shader, in genere vediamo quattro unità texture, portando il rapporto a 64 ALU a virgola mobile a 32 bit in media per ciascuna unità shader.

Questo apre una nuova filiale nel mercato delle GPU?

Tarjeta Gráfica Generica

Tralasciando tutta la parte tecnica, se guardiamo al mercato dei dispositivi PostPC e ai SoC che vengono loro assegnati, vedremo che un gran numero di GPU integrate sono completamente proprietarie. Finora il più utilizzato nei SoC made in China è stata l'architettura del Mali, ma con l'acquisto di ARM da NVIDIA questo limita le possibilità. Qualcomm possiede l'architettura Adreno, Apple ha anche la sua, e anche Imagination with PowerVR significa dover concedere in licenza a terzi per utilizzare la tecnologia.

Fondamentale è il fatto che ci sia una proposta per un'unità shader basata su RISC-V, poiché consentirà la creazione di nuove GPU basate su uno standard completamente gratuito e quindi non proprietario. Ciò significa che possono essere create nuove unità e miglioramenti che risolvono problemi comuni invece di cercare la stessa soluzione da diverse prospettive allo stesso tempo.

Se dobbiamo guardare a una potenza mondiale che può beneficiare di una tale tecnologia è chiaro che la prima che viene in mente è la Cina, ma possiamo anche vedere un'evoluzione di AMD, NVIDIA o Intel per utilizzare la versione RISC-V per costruire unità shader per trarre vantaggio dal progresso comune. Allo stesso modo in cui accade nel software e nel mondo dell'open source.