INNO3D GeForce RTX 4080 16GB iCHILL X3 [N40803-166XX-187049H]

NVIDIA Ada Lovelace: 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 Ada Lovelace non fa ovviamente eccezione, ed è espressamente progettata per accelerare numerose tipologie di applicazioni e carichi di lavoro ad alta intensità, allo scopo di assicurare un livello prestazionale mai visto.

Le declinazioni pensate per il mercato consumer, identificate con i nomi in codice AD10x, riprendono grossomodo quando già osservato in occasione della presentazione delle altrettanto rivoluzionarie soluzioni Ampere, introducendo però una serie di nuove funzionalità e ottimizzazioni, mirate ad ottenere un livello di performance significativamente superiore, raggiungendo quello che l’azienda stessa definisce come il più grande aggiornamento generazionale della sua storia. Il colosso di Santa Clara, infatti, stima come Ada Lovelace sia circa due volte più veloce nei carichi di lavoro basati sulla tradizionale rasterizzazione e fino a ben quattro 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 Ada Lovelace, 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.

La nuova architettura, tuttavia, non solo migliora le già ottime funzionalità 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 l’interessante tecnologia Shader Execution Reordering (SER), 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.

Ada Lovelace è inoltre la prima architettura ad essere sviluppata con l’avanzata tecnologia produttiva a 5 nanometri custom NVIDIA (4N), messa a punto dalla taiwanese TSMC 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, oltre che 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.


Ada Streaming Multiprocessor (SM), Cache e Unità Tensor Cores di quarta generazione


Innanzitutto, è fondamentale precisare che, rispetto alla passata generazione, non è stato previsto uno stravolgimento di quella che è la struttura interna delle unità Streaming Multiprocessor (SM) bensì, al contrario, osserviamo sostanzialmente un marcato incremento del loro quantitativo all’interno del processore grafico, reso possibile dall’impiego di un più avanzato processo produttivo.

Riconfermata quella che al debutto di Ampere fu tra le più rilevanti differenze rispetto alla precedente architettura, ovvero l’elaborazione delle operazioni in virgola mobile (FP32) a doppia velocità. Secondo la stessa NVIDIA, questo genere di operazioni rappresenta la maggior parte del carico di lavoro medio in ambito grafico, di conseguenza il tipo di approccio adottato per la loro elaborazione rappresenta un punto chiave per l’incremento sia dell’efficienza che delle pure prestazioni.

Per capire meglio di cosa stiamo parlando è però doveroso fare un piccolo passo indietro, ed osservare quello che accadeva in precedenza all’interno del processore grafico. Fino alle 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 offriva la possibilità di elaborare, per ogni ciclo di clock, un massimo di 16 operazioni INT32 e di 16 operazioni FP32.

Con la successiva architettura Ampere abbiamo assistito ad un cambiamento abbastanza significativo; entrambi i datapath principali furono resi in grado di elaborare operazioni FP32 (il primo percorso capace di combinare INT32 ed FP32, mentre il secondo solamente FP32), con il risultato che ogni partizione SM avrebbe potuto processare, per ogni ciclo di clock, o le solite 16 operazioni INT32 + 16 operazioni FP32, oppure un massimo di ben 32 operazioni FP32, assicurando quindi un raddoppio del throughput.

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 è stata indubbiamente in grado di assicurare un contributo notevole.

Ovvio che 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 alle architetture precedenti ad Ampere sarà marcata. NVIDIA aveva evidenziato 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. Il colosso californiano, infatti, aveva sottolineato 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 l’architettura della Cache e della memoria condivisa (Shared Memory), basata 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 è sempre pari a 128 KB per ogni SM. In modalità di calcolo sono ancora una volta 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 complessive della memoria cache L1 del 70%, passando dai 10.752KB di GA102 a ben 18.432KB della nuova soluzione di punta AD102, è stata enormemente ampliata anche la memoria cache di secondo livello (L2), raggiungendo nella declinazione completa del nuovo processore grafico, un quantitativo di ben 98.304KB, ovvero ben sedici volte in più rispetto ai 6.144KB presenti nella precedente soluzione di pari fascia.

L’azienda afferma che un tale quantitativo di veloce memoria cache a disposizione assicurerà un deciso beneficio nella maggior parte delle applicazioni, con particolare propensione verso quelle particolarmente complesse come il Ray Tracing, e più nello specifico nel path tracing. 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 quarta e alla terza generazione.

Non cambia il loro quantitativo all’interno di ognuna delle unità SM, sempre pari a 4 unità Tensor Cores a precisione mista, ed 1 unità RT Cores che analizzeremo nel dettaglio più avanti. Prendendo quindi come esempio la variante completa del nuovo processore grafico di fascia alta AD102, troviamo implementati un totale di 576 Tensor Cores, come anticipato 4 per ognuna delle unità SM presenti, e 1 per ogni blocco di elaborazione previsto all’interno della SM stessa.

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. Successivamente, con l’architettura Ampere, le unità furono riorganizzate allo scopo di migliorarne l’efficienza e ridurre il consumo energetico. Fu inoltre prevista l’accelerazione di più tipi di dati e venne 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.

Venne anche introdotto il supporto alle nuove modalità di precisione TF32 e BFloat16 dedicate ad alcune funzionalità basate sull’intelligenza artificiale dei servizi neurali NVIDIA NGX. 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 Super Resolution (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.

Con la quarta generazione delle unità Tensor Cores vengono riconfermante tutte queste funzionalità, ma grazie alle varie ottimizzazioni architetturali vengono assicurate prestazioni più che doppie, in termini di “Tensor TFLOPS”, con tutte le modalità di precisione sopra elencate (FP16, BF16, TF32, INT8 e INT4).

In aggiunta viene proposto, al pari delle complesse soluzioni datacenter basate su architettura Hopper, il pieno supporto al Transformer Engine (TE), una libreria per l’accelerazione dei modelli Transformer tramite GPU, in questo caso con precisione in virgola mobile a 8-bit (FP8), capace di assicurare prestazioni migliori con un utilizzo della memoria inferiore sia nell’addestramento che nell’inferenza. NVIDIA afferma che la nuova GeForce RTX 4090 sia in grado di garantire ben 1.3PetaFLOPS di calcoli tensor.


Sottosistema di Memoria GDDR6X by Micron Technology


Poiché le risoluzioni dello schermo continuano ad aumentare, 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 abbiamo assistito al debutto ufficiale, in ambito consumer, delle nuovissime memorie GDDR6X messe a punto da Micron Technology.

Certamente questa nuova tipologia ha rappresentato 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.

Con le nuovissime soluzioni Ada Lovelace viene riconfermato l’impiego delle GDDR6X, ma rispetto alle precedenti proposte di fascia alta Ampere è stata ulteriormente incrementata la velocità dei moduli, raggiungendo quota 22,4Gbps nelle soluzioni GeForce RTX 4080, la più alta finora osservata su una GPU con sottosistema di memoria GDDR. Allo stesso modo, con la nuova proposta di punta GeForce RTX 4090 viene raggiunta una  notevole larghezza di banda di picco, pari a ben 1TB/s.

Per ottenere questo, 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 velocità mai viste prima, 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.


Nuove unità RT Cores, Alpha Traversal e Displaced Micro-Mesh Engine


Il ray-tracing è una tecnologia di rendering estremamente impegnativa dal punto di vista computazionale, capace di simulare realisticamente l’illuminazione di una scena e dei suoi oggetti. In ambito professionale e cinematografico, seppur si faccia uso massiccio, ormai da diversi anni, di questa tecnica, sfruttando ad esempio gli strumenti Iray ed OptiX messi a disposizione da NVIDIA, non è mai stato possibile riprodurre tali effetti in alta qualità ed in tempo reale, specialmente affidandosi ad un singolo processore grafico.

Sempre a causa di questa sua natura intensiva in termini di elaborazione, questa tecnica non ha mai trovato impiego in ambito videoludico per attività di rendering significative. Come ben noto, infatti, i giochi che richiedono animazioni fluide ad elevati framerate si basano su ormai rodate tecniche di rasterizzazione, in quanto meno impegnative da gestire. Seppur scene rasterizzate possono vantare tutto sommato un bell’aspetto, non mancano purtroppo limitazioni significative che ne compromettono il realismo.

Ad esempio, il rendering di riflessi e ombre, utilizzando esclusivamente la rasterizzazione, necessita di semplificazioni di presupposti che possono causare diversi tipi di artefatti. Allo stesso modo, le scene statiche possono sembrare corrette fino a quando qualcosa non si muove, le ombre rasterizzate spesso soffrono di aliasing e fughe di luce e le riflessioni nello spazio possono riflettere solo gli oggetti visibili sullo schermo. Questi artefatti, oltre che compromettere il livello di realismo dell’esperienza di gioco, per essere in parte risolti obbligano gli sviluppatori a ricorrere ad effetti e filtri supplementari, con ovvio aumento delle richieste necessarie in termini di potenza elaborativa.

L’implementazione del ray-tracing in tempo reale su singola GPU è stata un’enorme sfida tecnica, che ha richiesto a NVIDIA quasi dieci anni di ricerca, progettazione e stretta collaborazione con i suoi migliori ingegneri in campo software. Tutti questi sforzi hanno portato alla messa a punto della tecnologia software NVIDIA RTX e di unità hardware specifiche espressamente dedicate al ray-tracing, denominate RT Cores e implementate per la prima volta nel 2018, in occasione del debutto di processori grafici basati su architettura Turing.

L’approccio scelto da NVIDIA appare del tutto intelligente, prevedendo una combinazione ibrida tra le due sopracitate tecniche di rendering. In questa maniera la rasterizzazione continuerà ad essere utilizzata laddove è più efficace, allo stesso tempo il ray-tracing verrà previsto esclusivamente negli ambiti nei quali è in grado di assicurare il maggior vantaggio visivo, come nel rendering dei riflessi, delle rifrazioni e delle ombre. A detta del colosso americano questo approccio rappresenta ad oggi il miglior compromesso possibile tra qualità e realismo grafico e onere computazionale. Nell’immagine che segue viene illustrato, in modo schematico, il funzionamento della nuova pipeline di rendering ibrida:

Anche se questi moderni processori grafici consentono un ray-tracing in tempo reale, il numero di raggi primari o secondari espressi per pixel o superficie varia in base a numerosi fattori, tra cui la complessità della scena, la risoluzione, gli ulteriori effetti grafici renderizzati nella scena stessa e, naturalmente, la potenza elaborativa del processore grafico. Non dobbiamo di conseguenza aspettarci che centinaia di raggi debbano o possano essere rappresentati in tempo reale. Sono, infatti, necessari molti meno raggi per pixel quando si utilizza l’accelerazione tramite RT Cores in combinazione con tecniche di filtraggio di riduzione del rumore avanzate. NVIDIA ha quindi messo a punto degli specifici moduli denominati Denoiser-Tracing, capaci di sfruttare appositi algoritmi basati sull’intelligenza artificiale allo scopo di ridurre in modo significativo il quantitativo di raggi per pixel richiesti pur senza compromettere in maniera marcata la qualità dell’immagine. Un esempio pratico di questo interessante approccio è stato mostrato nella demo Reflections creata dalla Epic Games in collaborazione con ILMxLAB e NVIDIA.

L’implementazione del ray-tracing in tempo reale nel motore grafico Unreal Engine 4 sfrutta le API Microsoft DXR e la tecnologia NVIDIA RTX per portare su schermo illuminazioni, riflessioni, ombre e occlusione ambientale di qualità cinematografica, il tutto eseguito su una singola GPU Quadro RTX 6000 o GeForce RTX 2080 Ti.

Con la nuovissima architettura Ada Lovelace debutta anche la terza generazione di unità RT Cores, unità rese ancor più prestanti ed efficienti rispetto al passato. NVIDIA stima una gestione delle intersezioni raggi-triangoli a velocità doppia rispetto alla scorsa generazione. Le nuove unità RT Cores, inoltre, confermano il pieno supporto verso le tecnologie di ray-tracing NVIDIA RTX e OptiX, le API Microsoft DXR e le più recenti API Vulkan Ray-Tracing, e possono accelerare le tecniche utilizzate in molte delle seguenti operazioni di rendering e non-rendering:


  • Riflessioni e Rifrazioni;
  • Ombre e Occlusione ambientale;
  • Illuminazione Globale;
  • Baking istantanea e offline della lightmap;
  • Immagini e anteprime in alta qualità;
  • Raggi primari nel rendering VR;
  • Occlusion Culling;
  • Fisica, rilevamento delle collisioni e simulazioni di particelle;
  • Simulazioni audio (ad esempio tramite NVIDIA VRWorks Audio basata sull’API OptiX);
  • Intelligenza artificiale;
  • In-engine Path Tracing (non in tempo reale) per generare immagini di riferimento per la messa a punto di tecniche di rendering in tempo reale di eliminazione del rumore, composizione del materiale e illuminazione della scena.

Questa nuova generazione di unità vanta la capacità di compiere due volte più velocemente operazioni di Alpha Traversal, il tutto grazie all’implementazione di un nuovo motore, denominato Opacity Micromap Engine, espressamente dedicato alla geometria alpha-tested al fine di ridurre in maniera considerevole i calcoli a carico degli shader.

Nello specifico, il nuovo motore si occuperà di valutare la maschera di opacità, ovvero una mesh virtuale di micro-triangoli, utilizzando un sistema di coordinate baricentriche allo scopo di definire lo stato di opacità del micro-triangolo corrispondente in modo tale da risolvere direttamente le intersezioni dei raggi con triangoli non opachi. Lo stato di opacità può essere opaco, trasparente o sconosciuto. Se opaco, verrà registrato e restituito direttamente. Se trasparente verrà semplicemente ignorato, proseguendo con la ricerca di una nuova intersezione. Se sconosciuto, il controllo verrà restituito all’SM, invocando uno shader (“anyhit”) per risolvere a livello di codice l’intersezione.

Anche i nuovi RT Cores sono in grado di gestire in hardware la cosiddetta Bounding Volume Hierarchy (BVH), un particolare algoritmo di scomposizione gerarchica delle superfici tridimensionali che fino ad Ampere richiedeva un’emulazione di tipo software per essere eseguita. Nello specifico l’obiettivo è quello di individuare tutti quei triangoli che incrociano effettivamente uno dei raggi di luce presenti nella scena. Le unità hardware lavorano insieme ad avanzati filtri di denoising all’interno dell’efficiente struttura di accelerazione della BVH sviluppata dagli ingegneri NVIDIA al fine di ridurre drasticamente la mole di lavoro a carico delle SM, consentendo a queste ultime di dedicarsi ad altre tipologie di operazioni, quali l’ombreggiatura dei pixel e dei vertici e quant’altro.

Rispetto alla precedente generazione è stato implementato un nuovo motore, denominato Displaced Micro-Mesh Engine, capace di assicurare una velocità fino a dieci volte superiore, unitamente a un utilizzo di spazio inferiore anche di ben venti volte.

Il principale scopo del colosso statunitense è quello di risolvere uno dei principali problemi derivati dall’aumento, di generazione in generazione, della complessità geometrica. Nonostante le prestazioni in Ray Tracing siano in grado di scalare molto bene all’aumentare della complessità geometrica (l’azienda stima che un aumento di 100 volte della complessità potrebbe infatti comportare solamente un raddoppio dei tempi di tracciamento), la creazione della struttura dati (BVH), che lo rende possibile, al contrario comporta un “costo” sostanzialmente lineare in termini di tempo e memoria necessaria. In altre parole un aumento di 100 volte della complessità geometrica potrebbe comportare 100 volte più tempo e 100 volte più memoria.

Le Displaced Micro-Meshes (DMM) dei nuovi RT Cores aiutano sotto questo profilo. Citiamo le parole di NVIDIA: “Abbiamo sviluppato le displaced micro-mesh di Ada come una rappresentazione strutturata della geometria che sfrutta la coerenza spaziale per la compressione e la sua struttura per un rendering efficiente con un livello di dettaglio intrinseco e deformazioni/animazioni leggere”.

“Durante il ray-tracing utilizziamo la struttura displaced micro-mesh per evitare un grande aumento dei costi di costruzione BVH (tempo e spazio) preservando un attraversamento BVH efficiente. Durante la rasterizzazione utilizziamo il LOD micro-mesh intrinseco per rasterizzare primitive di dimensioni corrette con Mesh Shader o Compute Shader”.

DMM è una nuova primitiva geometrica che è stata co-progettata con il Micro-Mesh Engine nell’RT core di terza generazione. Ogni micro-mesh è definita da un triangolo base e da una displacement map. Il Micro-Mesh Engine genera all’occorrenza micro-triangoli al fine di risolvere le intersezioni di raggi micro-mesh fino al singolo micro-triangolo. L’RT Cores di Ada processa nativamente questa primitiva, risparmiando spazio e calcoli rispetto a quanto è normalmente richiesto nella descrizione delle geometrie complesse usando solo triangoli base.

Tutti queste novità previste nei nuovi RT Cores di terza generazione migliorano le prestazioni di calcolo senza incrementare il tempo o il consumo di memoria.


Supporto Shader Execution Reordering  (SER)


NVIDIA è consapevole che la sola potenza bruta delle unità RT Core specializzate, seppur particolarmente elevata, non è sufficiente a garantire alti frame rate con contenuti di nuova generazione, poiché i carichi di lavoro ray tracing possono essere rallentati da una serie di fattori. In particolare, l’azienda fa riferimento agli shader RT divergenti quale principale freno alle massime prestazioni, in quanto non consentono alla GPU di lavorare in maniera uniforme (ad esempio quando si eseguono algoritmi di path tracing multi-bounce o quando si valutano materiali complessi).

La divergenza può assumere fondamentalmente due forme: divergenza di esecuzione, in cui thread diversi eseguono percorsi di codice diversi all’interno di uno shader; e divergenza di dati, in cui i thread accedono a risorse di memoria difficili da unire o memorizzare nella cache. Entrambe queste tipologie di divergenza rappresentano la normalità in ambito ray tracing, comportando uno spreco di risorse tale da lasciare purtroppo inespressa buona parte delle potenzialità della GPU.

Per questo motivo nei nuovi processori grafici è stata implementata una nuova tecnologia, denominata Shader Execution Reordering (SER), espressamente progettata per migliorare l’efficienza dell’esecuzione degli shader RT affrontando il problema della divergenza. Anni di ricerca e sviluppo sono stati investiti in questa tecnologia allo scopo di massimizzarne l’efficacia.

L’architettura Ada Lovelace è stata progettata pensando al SER ed include, di conseguenza, specifiche ottimizzazioni sia a livello di Streaming Multiprocessor (SM) che del sottosistema di memoria, mirate ad assicurare un efficiente riordino dei thread.  SER è completamente controllato dall’applicazione tramite una piccola API, consentendo agli sviluppatori di applicare facilmente il riordino dove il loro carico di lavoro ne trae maggior vantaggio. L’API introduce inoltre una nuova flessibilità per quanto riguarda l’invocazione di shader di ray tracing al modello di programmazione, consentendo modi più semplificati per strutturare le implementazioni del renderer sfruttando al contempo il riordino.

Il diagramma sopra riportato mostra un semplice esempio di ray tracing. A partire dall’angolo in alto a sinistra, un certo numero di thread GPU sta sparando raggi primari in una scena. Si può presumere che i raggi primari che colpiscono gli stessi oggetti eseguano lo stesso programma shader su ciascuno dei thread e che siano ben ordinati, quindi lo shading-hit primario sarà contraddistinto da un’elevata efficienza di esecuzione e località dei dati. I raggi secondari, al contrario, vengono generati in corrispondenza di ciascun punto colpito dal raggio primario nella scena centrale. Partendo dalle superfici colpite primarie, sparano in direzioni diverse, colpendo oggetti diversi.

Di conseguenza lo shading-hit secondario tenderà ad essere meno ordinato e meno efficiente durante l’esecuzione sulla GPU, perché diversi programmi shader sono in esecuzione sui diversi thread e spesso devono serializzare l’esecuzione. Esempi di raggi secondari che possono beneficiare di SER includono quelli utilizzati per path tracing, i riflessi, l’illuminazione indiretta e gli effetti di traslucenza.

La tecnologia Shader Execution Reordering (SER) di fatto aggiunge un nuovo stadio nella pipeline di ray tracing, che riordina e raggruppa gli shader-hit secondari per avere una migliore efficienza generale. A detta di NVIDIA, il buon uso della tecnologia SER può fornire un miglioramento delle prestazioni fino a 2 volte per gli shader RT nei casi con un alto livello di divergenza (come il path tracing). Durante i test interni con Cyberpunk 2077 con Ray Tracing attivo al massimo livello, è stato registrato un aumento delle prestazioni complessive pari al 44%.

Newsletter HW Legend


Caricamento