INNO3D GeForce RTX 3070 iCHILL X3 [C30703-08D6X-1710VA38]

NVIDIA Ampere - Uno sguardo alla nuova architettura

Sin dall’invenzione della prima GPU (Graphics Processing Unit) al mondo nell’ormai lontano 1999, le soluzioni NVIDIA sono state costantemente in prima linea nella grafica 3D e nell’elaborazione accelerata, con accorgimenti mirati a fornire livelli rivoluzionari di prestazioni ed efficienza.

La nuovissima famiglia di processori grafici basati su architettura Ampere non fa ovviamente eccezione, ed è espressamente progettata per accelerare numerose tipologie di applicazioni e carichi di lavoro ad alta intensità. Rilasciata ufficialmente nel corso del mese di maggio dello scorso anno, la prima GPU Ampere, meglio nota con il nome in codice A100, offre incredibili accelerazioni per l’addestramento e l’inferenza AI, i carichi di lavoro HPC e le applicazioni di analisi dei dati.

Le declinazioni pensate per il mercato consumer, identificate con i nomi in codice GA10x, riprendono grossomodo quando già osservato in occasione della presentazione delle altrettanto rivoluzionarie soluzioni Turing, introducendo però una serie di nuove funzionalità e ottimizzazioni, mirate ad ottenere un livello di performance significativamente superiore. Il colosso di Santa Clara, infatti, stima come Ampere sia 1,7 volte più veloce nei carichi di lavoro basati sulla tradizionale rasterizzazione e fino a ben 2 volte più veloce nel ray-tracing in tempo reale.

Ancora una volta vengono puntati i riflettori su quello che molti definiscono come il “Santo Graal” nel campo del rendering grafico computerizzato, ovvero il ray-tracing in tempo reale, anche in sistemi a singola GPU. I nuovi processori grafici NVIDIA basati su architettura Ampere, infatti, implementano migliori e ancor più sofisticate unità dedicate all’esecuzione delle operazioni di ray-tracing (denominate per l’appunto “RT Cores”), eliminando così dispendiosi e poco efficienti approcci basati sull’emulazione software. Queste nuove unità, combinate con la tecnologia software proprietaria NVIDIA RTX e con sofisticati algoritmi di filtraggio, consentono un rendering in ray-tracing in tempo reale, includendo oggetti e ambienti fotorealistici con ombre, riflessi e rifrazioni fisicamente precise.

L’architettura Ampere non solo migliora le già ottime funzionalità di ombreggiatura avanzate introdotte nella passata generazione, atte a migliorare le prestazioni, la qualità dell’immagine ed offrire nuovi livelli di complessità geometrica, ma ne introduce di nuove, tra cui il Ray-Traced Motion Blur accelerato in hardware, che osserveremo con più attenzione più avanti. Non mancano poi tutti i miglioramenti apportati alla piattaforma CUDA dedicati alla capacità, alla flessibilità, alla produttività e alla portabilità delle applicazioni di elaborazione. Funzioni quali la programmazione indipendente dei Thread, il Multi-Process Service (MPS) accelerato via hardware, e gruppi cooperativi fanno tutti parte di questa nuova architettura NVIDIA.

Ampere è inoltre la prima architettura ad essere sviluppata con la recente ed avanzata tecnologia produttiva a 8 nanometri custom NVIDIA (8N), messa a punto dalla coreana Samsung e capace di garantire non soltanto un deciso incremento dell’efficienza energetica ma soprattutto di offrire la possibilità di integrare un maggior quantitativo di unità di calcolo, grazie ad una densità superiore, e nuove funzionalità all’interno del processore grafico.

NVIDIA ha da tempo dimostrato in modo inequivocabile come una migliore tecnologia produttiva possa incidere in maniera decisa nella fase di progettazione dell’architettura, consentendo agli ingegneri di apportare modifiche e ottimizzazioni particolari, come il perfezionamento delle latenze e la pulizia dei vari segnali, mirate a garantire prestazioni e frequenze operative in precedenza impensabili, pur senza stravolgerne le fondamenta. Nei paragrafi che seguono andremo a descrivere quelle che sono le più significative differenze e novità introdotte con la nuova architettura.


Ampere Streaming Multiprocessor (SM) e nuove unità Tensor Cores


Una delle principali differenze architetturali rispetto alla passata generazione riguarda le unità Streaming Multiprocessor (SM), ancora una volta comprensive di molte delle funzionalità implementate nelle soluzioni professionali, ma ora capaci di un throughput doppio per quanto riguarda le operazioni in virgola mobile (FP32).

Secondo la stessa NVIDIA, questo genere di operazioni rappresenta la maggior parte del carico di lavoro medio in ambito grafico, di conseguenza sono state previste sostanziali differenze in termini di approccio rispetto alla passata generazione al fine di incrementare sia l’efficienza che le prestazioni, introducendo un’elaborazione FP32 a doppia velocità. Nelle precedenti soluzioni Turing ogni partizione SM poteva seguire due datapath principali, uno per l’elaborazione di operazioni su interi (INT32) e uno per l’elaborazione di operazioni virgola mobile (FP32).

Questo consentiva la possibilità di elaborare, per ogni ciclo di clock, un massimo di 16 operazioni INT32 e di 16 operazioni FP32. Con le nuove Ampere ci sono stati dei cambiamenti abbastanza significativi; entrambi i due datapath principali sono ora in grado di elaborare operazioni FP32 (il primo percorso combina INT32 ed FP32, mentre il secondo soltanto FP32), con il risultato che ogni partizione SM può elaborare, per ogni ciclo di clock, o le solite 16 operazioni INT32 + 16 operazioni FP32, oppure un massimo di ben 32 operazioni FP32.

I carichi di lavoro dei moderni videogiochi 3D prevedono un’ampia gamma di esigenze di elaborazione. Molti di questi si basano su un mix di istruzioni aritmetiche FP32, come FFMA, addizioni in virgola mobile (FADD) o moltiplicazioni in virgola mobile (FMUL), insieme a molte istruzioni intere più semplici per indirizzare e recuperare dati, confrontare o elaborare i risultati. L’aggiunta di funzionalità in virgola mobile al secondo percorso dati è indubbiamente in grado di assicurare un contributo notevole.

I miglioramenti delle prestazioni varieranno a livello di shader e applicazione a seconda della combinazione di istruzioni, più vi sarà uno sfruttamento pesante in termini di operazioni in virgola mobile e più la differenza in performance rispetto a Turing sarà marcata. NVIDIA evidenzia come il raddoppio del throughput FP32 incida anche in ambito Ray-Tracing, precisamente per quanto riguarda le operazioni di Denoising, oppure in applicativi professionali quali V-Ray e similari.

Del tutto invariato il quantitativo di unità SM per ogni blocco TPC (Thread/Texture Processing Clusters), sempre pari a due unità, così come in Turing. Ognuna di queste integra al proprio interno 64 core FP32/INT32 e altrettanti core FP32, di tipo concurrent, ovvero in grado di operare in parallelo e contemporaneamente.

Proprio questo aspetto rappresentava una delle differenze più significative, e con il maggior impatto in termini di performance, introdotte con l’architettura Turing. Il colosso californiano, infatti, aveva evidenziato un deciso incremento dell’efficienza, ricordando che per ogni 100 istruzioni in virgola mobile il processore grafico si trova a dover processare almeno 36 istruzioni di tipo integer, e sottolineando così come la possibilità di operare in parallelo e in contemporanea su l’una o l’altra tipologia di istruzione rappresenti un punto chiave delle moderne architetture grafiche.

Ad essere radicalmente rivista ed ottimizzata è stata anche l’architettura della Cache e della memoria condivisa (Shared Memory), ora basate su un design di tipo unificato in grado di essere riconfigurato a seconda del carico di lavoro per allocare più memoria per la L1 o per la memoria condivisa a seconda delle necessità. La capacità della cache di dati L1 è aumentata a 128 KB per ogni SM, contro i 96 KB previsti in Turing. In modalità di calcolo sono ora supportate le seguenti configurazioni:


  • 128 KB L1 + 0 KB Shared Memory;
  • 120 KB L1 + 8 KB Shared Memory;
  • 112 KB L1 + 16 KB Shared Memory;
  • 96 KB L1 + 32 KB Shared Memory;
  • 64 KB L1 + 64 KB Shared Memory;
  • 28 KB L1 + 100 KB Shared Memory.

Oltre ad incrementare le dimensioni della memoria cache L1 del 33% (dai 6912KB di TU102 a ben 10752KB di GA102), è stata raddoppiata anche la larghezza di banda della memoria condivisa, con prestazioni che raggiungono i 128 byte/clock per SM contro i 64 byte/clock della soluzione Turing. La larghezza di banda L1 totale della nuova GeForce RTX 3080 raggiunge quota 219 GB/sec contro i 116 GB/sec della precedente soluzione GeForce RTX 2080 SUPER.

L’insieme di questi interventi assicura un significativo impatto sulle prestazioni, semplificando allo stesso tempo la programmazione e l’ottimizzazione necessaria all’ottenimento di prestazioni prossime al picco massimo. Sempre all’interno dello Streaming Multiprocessor (SM), troviamo le unità computazionali specifiche che hanno rappresentato il vero e proprio punto di svolta rispetto alle architetture pre-Turing, ovvero Tensor Cores e RT Cores, giunte rispettivamente alla terza e alla seconda generazione.

In ognuna delle unità SM presenti in Ampere troviamo un quantitativo pari a 4 unità Tensor Cores a precisione mista, ed 1 unità RT Cores che analizzeremo nel dettaglio più avanti. Rispetto a Turing, quindi, troviamo un numero dimezzato di unità Tensor Cores, tuttavia ognuna di quelle ora presenti vanta, come vedremo, potenzialità di gran lunga superiori. Le unità Tensor Cores osservate in occasione della presentazione dell’architettura Turing, introducevano le modalità di precisione INT8 e INT4, capaci di gestire operazioni quantistiche e supportavano appieno, inoltre, la modalità FP16 per carichi di lavoro che richiedono un maggior livello di precisione.

I nuovi Tensor Cores dell’architettura Ampere sono stati riorganizzati per migliorarne l’efficienza e ridurre il consumo energetico. Con la terza generazione di queste unità vengono accelerati ancor più tipi di dati e viene implementato il supporto hardware per l’elaborazione di matrici con pattern sparsi, assicurando un raddoppio del throughput anche grazie alla possibilità di saltare elementi non necessari. Nella configurazione GA10x ogni SM ha il doppio del throughput di un Turing SM durante l’elaborazione di matrici sparse, pur mantenendo lo stesso throughput totale di un Turing SM per le operazioni ad alta densità.

Il supporto Sparsity consente ai processori grafici Ampere di fornire in modo efficiente un enorme aumento del throughput rispetto a Turing; basandosi su stime NVIDIA una GeForce RTX 3080 è in grado di offrire un throughput operativo di ben 2,7 volte superiore rispetto ad una precedente GeForce RTX 2080 SUPER.

Sempre prendendo come esempio la soluzione GeForce RTX 3080 scelta da NVIDIA, basata sulla variante semi-completa del processore grafico di fascia alta GA102, troviamo implementati un totale di 272 Tensor Cores, come anticipato 4 per ognuna delle unità SM presenti, e 1 per ogni blocco di elaborazione previsto all’interno della SM stessa.

Ognuno di essi può eseguire fino a 128 operazioni FMA (Fused Multiply-add) in virgola mobile per ciclo di clock utilizzando input FP16, che salgono a ben 256 con matrice sparsa. Moltiplicando questo dato per il quantitativo di unità previste all’interno di ogni SM otteniamo un totale di 512 operazioni di tipo FP16 oppure 1.024 operazioni con matrice sparsa per ogni ciclo di clock.

La funzione Fine-Grained Structured Sparsity può sfruttare le reti di deep learning per raddoppiare il throughput delle operazioni Tensor Core rispetto alla generazione precedente. I Tensor Cores di terza generazione accelerano le funzionalità di intelligenza artificiale come NVIDIA DLSS per la AI Super-Resolution (ora con supporto fino a 8K), l’app NVIDIA Broadcast per comunicazioni video e vocali ottimizzate con AI e l’app NVIDIA Canvas per la pittura basata su AI.

Gli ingegneri NVIDIA hanno scoperto che, poiché le reti di deep learning sono in grado di evolversi durante il processo di formazione in base ai feedback, in generale il vincolo della struttura non influisce sulla precisione della rete addestrata per l’inferenza. Ciò consente di inferire l’accelerazione anche con Sparsity.

Inoltre, il design Tensor Cores di terza generazione aumenta ulteriormente le prestazioni grezze e introduce le nuove modalità di precisione TF32 e BFloat16 dedicate ad alcune funzionalità basate sull’intelligenza artificiale dei servizi neurali NVIDIA NGX. Ad esempio BF16 è un’alternativa a IEEE FP16 e include un esponente a 8 bit, una mantissa a 7 bit e 1 sign-bit. Sia FP16 che BF16 hanno dimostrato di addestrare con successo le reti neurali in modalità a precisione mista, abbinando i risultati dell’addestramento FP32 senza aggiustamento iper-parametrico.

Entrambe le modalità FP16 e BF16 dei Tensor Cores forniscono un throughput matematico 4 volte superiore rispetto allo standard FP32 nelle GPU GA10x. Oggi, la matematica predefinita per l’addestramento AI è FP32, senza l’accelerazione Tensor Core. L’architettura Ampere introduce il pieno supporto per TF32, consentendo di utilizzare i Tensor Core in fase di addestramento AI per impostazione predefinita senza alcuno sforzo da parte dell’utente.

Le operazioni senza unità Tensor dedicate continuano a utilizzare il percorso dati FP32, mentre in modalità TF32 i Tensor Cores leggono i dati FP32 e utilizzano lo stesso intervallo di FP32 con una precisione interna ridotta, prima di produrre un output IEEE FP32 standard. TF32 include un esponente a 8 bit (uguale a FP32), mantissa a 10 bit (stessa precisione di FP16) e 1 sign-bit. La modalità TF32 di una GPU con architettura Ampere offre un throughput doppio rispetto allo standard FP32.

Grazie ai Tensor Cores abbiamo visto sdoganare il deep-learning anche in ambito gaming; nello specifico vengono accelerate alcune funzionalità basate sull’intelligenza artificiale al fine di migliorare la qualità grafica nei titoli di nuova generazione, il rendering ed altre applicazioni lato client. Alcuni esempi di funzionalità NGX AI sono il Deep-Learning Super Sampling (DLSS), l’AI InPainting, l’AI Super Rez e l’AI.


Nuovo sottosistema di Memoria GDDR6X by Micron Technology


Poiché le risoluzioni dello schermo continuano ad aumentare e le funzionalità shader e le tecniche di rendering diventano sempre più complesse, la larghezza di banda e la capacità complessiva della memoria video dedicata giocano un ruolo sempre più rilevante nelle prestazioni dei moderni processori grafici.

Per mantenere un livello di frame rate e una velocità di calcolo più elevati possibili, la GPU non solo ha bisogno di più larghezza di banda di memoria, ma necessita anche di un ampio quantitativo di memoria dedicata da cui attingere per offrire prestazioni costanti e sostenute. Proprio per questi motivi NVIDIA lavora da diverso tempo a stretto contatto con le principali realtà dell’industria DRAM, così da implementare in ogni sua GPU la migliore e più avanzata tecnologia di memoria disponibile.

Se in passato abbiamo assistito a soluzioni grafiche dotate, per la prima volta in assoluto, di prestanti ed innovative HBM2, GDDR5X e GDDR6, con Ampere assistiamo al debutto ufficiale, in ambito consumer, delle nuovissime memorie GDDR6X messe a punto da Micron Technology. Certamente questa nuova tipologia rappresenta un grande passo avanti nella progettazione della memoria DRAM GDDR ad elevate prestazioni, tuttavia non bisogna pensare che la sua implementazione non abbia richiesto comunque notevoli sforzi. Gli ingegneri NVIDIA, infatti, hanno dovuto ridisegnare completamente il circuito I/O ed il canale di comunicazione tra la GPU e i moduli di memoria stessi, al fine di garantire la massima stabilità ed efficienza a frequenze di funzionamento così elevate.

Il sottosistema di memoria di Ampere vanta infatti una frequenza di clock pari a ben 19.5Gbps, aspetto che assicura non soltanto un notevole miglioramento dell’efficienza energetica rispetto alla memoria GDDR6 utilizzata nelle GPU Turing di fascia alta (TU102), ma anche un incremento della larghezza di banda di picco superiore al 50%, raggiungendo per la prima volta su una GPU consumer una bandwith superiore ai 900GB/s.

Per ottenere questa svolta, sono state introdotte innovative tecnologie di trasmissione del segnale e di modulazione di ampiezza dell’impulso, così da ridefinire completamente il modo in cui il sottosistema di memoria sposta i dati. Utilizzando le tecniche di segnale multi-livello PAM4, GDDR6X trasferisce più dati e a una velocità molto più veloce, spostando due bit di informazioni alla volta e raddoppiando la velocità di dati I/O del precedente schema di segnale PAM2/NRZ. I carichi di lavoro affamati di dati, come inferenza AI, Ray-Tracing in tempo reale e rendering video a risoluzione fino ad 8K, possono ora essere alimentati con dati a velocità elevate, aprendo nuove opportunità per il computing e nuove esperienze per l’utente finale.

Nell’immagine riportata poco sopra si nota come la stessa quantità di dati può essere trasferita attraverso l’interfaccia GDDR6X a una frequenza dimezzata rispetto a GDDR6. In alternativa, GDDR6X può raddoppiare la larghezza di banda effettiva rispetto a GDDR6 a una determinata frequenza operativa. Il supporto PAM4 rappresenta un grande aggiornamento rispetto all’NRZ a due livelli previsto nelle memorie GDDR6.

Invece di trasmettere due bit di dati ogni ciclo di clock (un bit sul fronte di salita e un bit sul fronte di discesa del clock), PAM4 invia due bit per fronte di clock, codificati utilizzando quattro diversi livelli di tensione. I livelli di tensione sono divisi in passi di 250mV, con ogni livello che rappresenta due bit di dati – 00, 01, 10 o 11 inviati su ogni fronte di clock (sempre tecnologia DDR).

Con il nuovo design viene ridotto al minimo il rumore e le variazioni dovute al processo, alla temperatura e alla tensione di alimentazione, inoltre, grazie ad un più ampio clock-gating viene notevolmente ridotto il consumo di energia durante i periodi di minore utilizzo, con conseguente e significativo miglioramento dell’efficienza energetica complessiva.


Tecnologia di Compressione della Memoria


Le GPU NVIDIA utilizzano ormai da tempo diverse tecniche di compressione della memoria al fine di ridurre le esigenze di larghezza di banda grazie all’archiviazione in formato compresso, e senza perdita di qualità, dei dati di colore del frame buffer con possibilità, da parte del processore grafico, sia di lettura che di scrittura degli stessi. La riduzione della larghezza di banda garantita dalla compressione della memoria offre una serie di vantaggi, tra cui:


  • Riduzione della quantità di dati scritti verso la memoria;
  • Riduzione della quantità di dati trasferiti dalla memoria alla Cache L2 (un blocco di pixel compresso, infatti, produrrà un ingombro sulla memoria inferiore rispetto a un blocco non compresso);
  • Riduzione del quantitativo di dati trasferiti tra differenti client (come ad esempio tra le Texture Unit ed il Frame Buffer).

La pipeline di compressione del processore grafico prevede diversi algoritmi pensati per determinare in maniera intelligente il modo più efficace per comprimere i dati. Tra questi, quello indubbiamente più significativo è rappresentato dalla tecnica di compressione del colore di tipo Delta (Delta Color Compression), ossia la capacità della GPU di analizzare le differenze tra il colore dei pixel presenti all’interno di un blocco, che verrà successivamente memorizzato come riferimento, ed i successivi blocchi che compongono il dato completo.

In questa maniera anziché utilizzare un grosso quantitativo di spazio per registrare la mole di dati nella sua interezza, verrà immagazzinato esclusivamente l’insieme di pixel di riferimento con l’aggiunta dei valori differenti (per l’appunto “delta”) rilevati rispetto allo stesso. Di conseguenza, se il delta tra un blocco e l’altro è sufficientemente piccolo saranno necessari solamente pochi bit per identificare il colore dei singoli pixel, riducendo nettamente lo spazio necessario per la memorizzazione dei dati.

Con la nuova architettura sono stati ulteriormente migliorati i già ottimi ed avanzati algoritmi di compressione della memoria implementati nelle soluzioni della passata generazione, offrendo così un ulteriore incremento dell’ampiezza di banda effettiva e contribuendo a ridurre in maniera ancor più marcata la quantità di byte che il processore grafico deve recuperare dalla memoria per singolo frame.

L’insieme di queste migliorie, in abbinamento all’impiego dei nuovi moduli di memorie GDDR6X operanti a ben 19.5Gbps, assicura un notevole aumento dell’ampiezza di banda effettiva, aspetto di fondamentale importanza per mantenere l’architettura bilanciata e sfruttare nel migliore dei modi la architettura delle unità SM.

Newsletter HW Legend


Caricamento