Turing e le prestazioni con i giochi attuali

Alcuni appassionati hanno espresso preoccupazione per il fatto che le schede Turing non abbiano un numero di CUDA core nettamente superiore alle schede di precedente generazione. Le schede della serie 10 hanno persino frequenze GPU Boost più alte. Nvidia non ha aiutato a fare chiarezza, non spiegando i miglioramenti generazionali nei giochi attuali all'evento di lancio a Colonia. L'azienda ha però riposto molti sforzi nella riprogettazione di Turing per assicurare migliori prestazioni per core.

concorrent execution
Clicca per ingrandire

Per iniziare, Turing ha attinto dall'architettura Volta per quanto riguarda il supporto all'esecuzione simultanea di istruzioni aritmetiche FP32, le quali rappresentano la maggior parte del carico di lavoro degli shader e le operazioni INT32 (per indirizzare/ripescare dati, calcoli floating-point min/max, confronti, ecc.). Quando leggete che i core Turing raggiungono migliori prestazioni di quelli Pascal a una data frequenza, sono le caratteristiche che abbiamo citato a illustrare ampiamente il motivo.

Nelle generazioni precedenti, un singolo percorso di dati matematici significava che tipi di istruzione differenti non potevano essere svolti contemporaneamente, portando allo stallo della pipeline a virgola mobile ogni volta che erano necessarie operazioni non FP (floating point) in un programma shader.

Volta ha cercato di cambiare la situazione creando pipeline separate. Anche se Nvidia ha eliminato la seconda unità dispatch assegnata a ciascun warp scheduler, l'azienda ha detto di aver aumentato il throughput dell'istruzione emessa. Com'è possibile? Si deve tutto alla composizione di ogni SM all'interno dell'architettura.

Guardate i due diagrammi sotto. Pascal ha un warp scheduler per quad, con ogni quad che contiene 32 CUDA core. Lo scheduler di un quad può emettere una coppia di istruzioni per clock tramite le due unità dispatch con la condizione che entrambe le istruzioni provengano dallo stesso warp a 32 thread, e solo una può essere un'istruzione matematica di base. Comunque, c'è un'unità dispatch per 16 CUDA core.

Di contro Turing ha meno CUDA core in un SM, ma ha più SM complessivi nella GPU. Ora c'è uno scheduler per 16 CUDA core (il doppio di Pascal), insieme a un'unità dispatch per 16 CUDA core (come Pascal). È stato invece eliminato l'accoppiamento delle istruzioni. E poiché Turing raddoppia gli scheduler, è sufficiente emettere una sola istruzione verso i CUDA core in qualsiasi ciclo per mantenerli occupati (con 32 thread per warp, 16 CUDA core impiegano due cicli per usarli tutti). Nel frattempo, è possibile impartire un'istruzione differente a qualsiasi altra unità, inclusa la nuova pipeline INT32. La nuova istruzione può inoltre provenire da qualsiasi warp.

La flessibilità di Turing deriva dall'avere il doppio di scheduler di Pascal, in modo che ognuno abbia meno calcoli da alimentare per ciclo, non da un progetto più complesso. Gli scheduler emettono ancora un'istruzione per ciclo di clock. L'architettura è solo in grado di usare meglio le risorse grazie all'equilibrio superiore nell'SM.

turing sm nvidia
pascal sm nvidia
A sinistra l'SM di Turing, a destra un SM di Pascal, clicca per ingrandire

Secondo Nvidia i potenziali miglioramenti sono rilevanti. In un gioco come Battlefield 1, per ogni 100 istruzioni in virgola mobile ci sono 50 istruzioni che non sono in virgola mobile nel codice shader. Altri titoli si affidano persino più pesantemente ai calcoli in virgola mobile. L'azienda afferma che ci sono una media di 36 istruzioni integer nella pipeline che bloccherebbero la pipeline FP ogni 100 istruzioni FP. Queste ora possono essere scaricate sui core INT32.

Malgrado la separazione dei percorsi FP32 e INT32 nei diagrammi a blocchi, Nvidia afferma che ogni Turing SM contiene 64 CUDA core per mantenere le cose il più semplici possibile. Il Turing SM comprende anche 16 unità load/store, 16 unità a funzione speciale, 256 KB di spazio per il file di registro, 96 KB di memoria condivisa e cache dati L1, quattro unità texture, otto Tensor core e un RT core.

Sulla carta un SM nella GPU di precedente generazione GP102 appare più complesso, con il doppio di CUDA core, unità load/store, unità a funzione speciale, texture unit, più capacità per il file di registro e più cache.

Ricordate però che il nuovo TU102 ha 72 SM in totale, mentre il GP102 si ferma a 30 SM. Il risultato è che la soluzione di punta Turing ha il 21% di CUDA core e unità texture in più della GeForce GTX 1080 Ti, ma anche più SRAM per registri, memoria condivisa e cache L1 (senza parlare dei 6 MB di cache L2, che raddoppiano i 3 MB del GP102).

L'aumento della memoria sul die gioca un ruolo importante nel migliorare le prestazioni, così come la sua organizzazione gerarchica. Con l'architettura Kepler ogni SM aveva 48 KB di cache texture in sola lettura, più 64 KB di cache L1 / memoria condivisa. In Maxwell e Pascal la cache L1 e le cache texture sono state combinate, lasciando 96 KB di memoria condivisa. Ora Turing combina tutte e tre in un insieme condiviso e configurabile di 96 KB.

Il beneficio dell'unificazione è, naturalmente, che indipendentemente dal fatto che un carico di lavoro sia ottimizzato per la cache L1 o la memoria condivisa, la capacità on-chip viene usata completamente anziché restare inattiva come avrebbe fatto in passato.

Lo spostamento della funzionalità della cache L1 verso il basso ha l'ulteriore vantaggio di porla su un bus più ampio, raddoppiando la larghezza di banda (a livello TPC Pascal supporta 64 byte per clock di bandwidth cache hit mentre Turing arriva a 128 byte per clock). E poiché questi 96 KB possono essere configurati come 64 KB di cache L1 e 32 KB di memoria condivisa (o viceversa), la capacità della cache L1 per SM può essere il 50% maggiore.

turing tpc vs pascal tpc
Clicca per ingrandire

Per riassumere, Nvidia afferma che l'effetto delle pipeline matematiche riprogettate e della nuova architettura di memoria è un incremento prestazionale del 50% per CUDA core. Per mantenere questi core alimentati in modo più efficace, Nvidia ha accoppiato al TU102 la memoria GDDR6 e ottimizzato le sue tecnologie per la riduzione dello scambio dati, come la compressione delta color.

Se mettiamo a confronto i moduli GDDR5X a 11 Gbps della GTX 1080 Ti con la memoria GDDR6 a 14 Gbps della RTX 2080 Ti, entrambe su un bus a 352 bit, avete un data rate/bandwith di picco il 27% più alto. Quindi, a seconda del gioco, quando la RTX 2080 Ti può evitare di inviare dati sul bus, il throughput effettivo aumenta ulteriormente di percentuali a due cifre.

rtx vs gtx traffic
Clicca per ingrandire
Pagina precedente

Tensor Core e DLSS, Turing guarda al futuro

Anche se l'architettura Volta era zeppa di grandi cambiamenti rispetto a quella Pascal, l'aggiunta dei Tensor core ha rappresentato l'indicazione più chiara dello scopo della GPU GV100: quei core nascono per accelerare operazioni a matrice 4x4 con input FP16, ossa la base dell'allenamento di reti neurali e inferenza.

Come l'SM di Volta, anche Turing ha due Tensor core per quad, o per capirci meglio ha otto Tensor core per Streaming Multiprocessor. TU102 ha meno SM di GV100 (72 vs. 84), e la RTX 2080 Ti ha meno SM abilitati di una Titan V (68 vs. 80). Perciò la RTX 2080 Ti ha solo 544 Tensor core rispetto ai 640 della Titan V. I Tensor core di TU102 sono però implementati in modo differente: non supporta la moltiplicazione FP16 con operazioni d'accumulo FP32 usate per l'allenamento in ambito deep learning.

Si tratta di una scelta che ha senso: GV100 è stato progettato per l'allenamento di reti neurali mentre TU102 è una GPU gaming in grado di usare reti allenate per l'inferenza. Puntare specificatamente a operazioni FP16, INT8 e INT4 richiede meno transistor che costruire percorsi più ampi per una precisione maggiore. Di conseguenza vi sono benefici prestazionali. Nvidia afferma che i Tensor core di TU102 garantiscono un massimo di 114 TFLOPS con operazioni FP16, 228 TOPS con INT8 e 455 TOPS con INT4.

La maggior parte dei piani attuali di Nvidia per i Tensor core si concentra attorno al concetto di grafica neurale. L'azienda sta tuttavia ricercando altri campi di applicazione del deep learning per le schede video desktop.

Nemici intelligenti, ad esempio, potrebbero cambiare completamente il modo in cui i giocatori approcciano ai combattimenti. La sintesi vocale, il riconoscimento della voce, il miglioramento del materiale artistico, il rilevamento di cheat e l'animazione del personaggio sono tutte aree dove l'AI è già in uso o dove Nvidia vede del potenziale.

deep learning super sampling
Clicca per ingrandire

Il focus di questo lancio però è sul Deep Learning Super Sampling (DLSS). Il processo tramite il quale DLSS è implementato richiede il supporto da parte dello sviluppatoro tramite l'API Nvidia NGX. L'azienda afferma che l'integrazione è piuttosto semplice e sono già 25 i giochi che supporteranno DLSS dimostrando cosa può fare per la qualità delle immagini.

Il tutto è gestito da Nvidia stessa, che offre alle software house la possibilità di ottenere una cosiddetta "ground truth image", ossia la rappresentazione qualitativamente più alta possibile dei propri asset, grazie a una risoluzione super elevata e altre soluzioni.

Una volta ottenuta, Nvidia può allenare un modello di intelligenza artificiale grazie al proprio server SaturnV DGX-1 composto da 660 nodi per ottenere immagini di minore qualità ma quanto più vicine alla "ground truth image".

Questi modelli si scaricheranno tramite i driver di Nvidia e vi si accederà mediante i Tensor core da qualunque scheda GeForce RTX. Nvidia afferma che ogni modello AI peserà "nell'ordine dei megabyte", il che lo rende piuttosto leggero. Anche se speriamo che il software GeForce Experience non sia un requisito di DLSS, sospettiamo che lo sarà.

Nvidia ha confermato che le caratteristiche di NGX sono strettamente integrate in GFE. Se il software rileva una GPU basata su architettura Turing, scarica un pacchetto chiamato NGX Core, che determina se i giochi / app sono rilevanti per NGX. Quando c'è una corrispondenza, NGX Core recupera qualsiasi rete neurale profonda associata per l'uso successivo.

taa
TAA abilitato: notate il testo "rovinato", clicca per ingrandire
dlss
DLSS abilitato: gli artefatti sono spariti, clicca per ingrandire

DLSS rappresenterà un reale passo avanti? È difficile dirlo adesso. Abbiamo visto un esempio di DLSS con la demo Infiltrator di Epic e sembrava funzionare davvero bene. Non è chiaro se Nvidia saprà ottenere risultati simili con ogni gioco, in base a genere, dettaglio ambientale e così via. Ciò che sappiamo è che DLSS è un auto-encoder convoluzionale in tempo reale addestrato su immagini campionate 64 volte. Per funzionare necessita di un frame a risoluzione normale tramite l'API NGX per restituire una versione di quel frame a qualità superiore.

A margine della Gamescom Nvidia ha iniziato a parlare di prestazioni, anticipando il comportamento della RTX 2080 con DLSS abilitato rispetto alla GTX 1080. Quei risultati facevano sembrare che l'attivazione di DLSS migliorasse il frame rate in modo incredibile, ma non c'erano informazioni a chiarire come fossero stati fatti i benchmark. A quanto pare, DLSS migliora le prestazioni riducendo il carico di lavoro della scheda per quanto riguarda lo shading, ottenendo allo stesso tempo una qualità simile.

Turing può produrre un'uscita di qualità maggiore da un determinato numero di campioni di partenza rispetto a un algoritmo di post-processing come Temporal Anti-Aliasing (TAA). Per DLSS, Nvidia trasforma il tutto in un vantaggio prestazionale riducendo i sample di partenza dati alla rete fino a quando l'uscita finale (alla stessa risoluzione di TAA) è vicina a una qualità simile. Anche se Turing passa del tempo a gestire la rete neurale profonda, i risparmi attribuibili a un minor lavoro di shading sono maggiori. Con DLSS 2x Nvidia afferma che può raggiungere l'equivalente di un super-sampling 64x renderizzando gli input alla risoluzione obiettivo, evitando gli artefatti legati alla trasparenza e alla sfocatura che si vedono a volte con il TAA.

Nvidia afferma che sono già 25 i giochi in lista per supportare DLSS, inclusi titoli esistenti come Ark: Survival Evolved, Final Fantasy XV e PlayerUnknown's Battlegrounds.

Hybrid Ray Tracing in tempo reale

Parliamo ora del Ray Tracing core (RT core) integrato in ogni SM di TU102. Gli RT core di Nvidia sono in breve degli acceleratori a funzione fissa per Bounding Volume Hierarchy (BVH) traversal e triangle intersection evaluation. Entrambe le operazioni sono essenziali per l'algoritmo di ray tracing. 

bvh 01
bvh 02
bvh 03
bvh 04
I passaggi dell'algoritmo BHV, clicca per ingrandire

In breve, BVH forma dei box geometrici in una determinata scena. Questi box aiutano a restringere la posizione dei triangoli che intersecano i raggi tramite una struttura ad albero. Ogni volta che si trova un triangolo in un box, quel box viene ulteriormente diviso in più box fino a quando il box finale può essere diviso in triangoli. Senza BVH, l'algoritmo sarebbe costretto a ricercare nell'intera scena, bruciando tonnellate di cicli nel testare ogni triangolo per un'intersezione.

bvh software emulation

Il funzionamento di questo algoritmo è possibile grazie alle API Microsoft D3D12 Raytracing Fallback Layer, che usano i computer shader per emulare DirectX Raytracing su dispositivi senza supporto nativo - e spingerli verso DXR quando c'è il supporto da parte dei driver.

Su una GPU Pascal, ad esempio, la scansione BVH avviene sui core programmabili, che prelevano ogni box, lo decodificano, testano per un'intersezione e determinano se c'è un sottobox o triangoli all'interno. Il processo prosegue fino a quando non si trovano i triangoli, punto in cui sono testati per l'intersezione con il raggio. Come potete immaginare è un'operazione molto probante da svolgere in software, impedendo al ray tracing in tempo reale di funzionare fluidamente sulle attuali GPU.

ray tracing hardware acceleration

Creando acceleratori a funzione fissa per queste operazioni, l'SM inserisce un raggio nella scena usando uno shader per la generazione dei raggi e cede la struttura di accelerazione trasversale agli RT core a funzione fissa. Di conseguenza, tutte le valutazioni delle intersezioni si verificano molto più rapidamente e le altre risorse SM sono liberate per lo shading proprio come farebbero per un carico di lavoro tradizionale di rasterizzazione.

ray tracing 1
Clicca per ingrandire

Secondo Nvidia, la GeForce GTX 1080 Ti può gestire 1,1 miliardi di raggi al secondo via software usando i CUDA core capaci di 11,3 TFLOPs in FP32. Di contro la nuova RTX 2080 Ti può gestire 10 miliardi di raggi al secondo usando i suoi 68 RT core. È importante notare che nessuno di questi dati è basato su valori di picco, ma sul significato geometrico dei risultati di diversi carichi.

Continua a pagina 7

Pubblicità

AREE TEMATICHE