INNO3D GeForce RTX 2080 SUPER TWIN X2 OC [N208S2-08D6X-11801167]

NVIDIA Turing - Uno sguardo alla nuova architettura - Parte Seconda

Indice


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 Turing sono stati ulteriormente migliorati i già ottimi ed avanzati algoritmi di compressione della memoria implementati nelle soluzioni Pascal, 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 GDDR6 operanti a ben 14Gbps, assicura un aumento medio dell’ampiezza di banda effettiva del 50% rispetto a Pascal, aspetto di fondamentale importanza per mantenere l’architettura bilanciata e sfruttare nel migliore dei modi la architettura delle unità SM.


Tecnologia Turing Ray Tracing e nuove unità RT Cores


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 nei recenti processori grafici Turing (TU102, TU104 e TU106).

L’approccio finale 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 le GPU Turing 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.

Le nuove unità RT Cores supportano appieno le tecnologie di ray-tracing NVIDIA RTX e OptiX, le API Microsoft DXR e le future 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.

Gli RT Cores, inoltre, sono in grado di gestire in hardware la cosiddetta Bounding Volume Hierarchy (BVH), un particolare algoritmo di scomposizione gerarchica delle superfici tridimensionali che finora 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. Funzioni come la costruzione e il refitting BVH sono gestite direttamente dai driver, mentre la generazione e l’ombreggiatura dei raggi sono a carico dell’applicazione attraverso nuovi tipi di shader.

Per comprendere meglio la funzione dei nuovi RT Cores e cosa accelerano esattamente, dovremmo prima spiegare come viene eseguito il ray-tracing su GPU o CPU senza un motore hardware dedicato. In questo caso, come descritto da NVIDIA, sono gli shader a lanciare il cosiddetto “raggio sonda” che innesca il processo BVH vero e proprio, comprendente tutti i suddetti test di intersezione raggio/triangolo.