Tra la GDC 2018, il Siggraph e la Gamescon , Nvidia sta lanciando la sua nuova serie di schede grafiche, che sta cogliendo un po’ tutti di sorpresa perché non è quello che in molti si aspettavano. Dopo il salto, una mia analisi sulla questione.
Credo che convenga un attimo fare un discorso introduttivo
sulla storia dell’evoluzione delle GPU o schede grafiche che dir si voglia. Qual
è lo scopo fondamentale di una scheda grafica? È un circuito elettronico
specializzato per a manipolazione della memoria atta alla creazione di immagini
che dovranno essere visualizzate su un monitor. In principio, tutte le azioni
grafiche erano gestite dalla CPU. Ma si poteva notare come fosse una cosa
inefficiente. Così, nel tempo, si svilupparono coprocessori ed acceleratori
grafici che offrivano hardware a funzioni fisse per alleggerire il calcolo
grafico dalla CPU. Il concetto di hardware a funzioni fisse è fondamentale. Una
GPU sapeva fare solo ed esclusivamente quello per il quale era costruita.
La rivoluzione nel campo delle GPU arrivò con l’era della programmabilità, ovvero le schede grafiche erano in grado di eseguire programmi grafici, chiamati shaders. Parliamo della serie Geforce 3, del 2001. Questa introdusse due unità speciali, Pixel e Vertex Shaders, in grado di fare operazioni rispettivmente sui pixel e sui vertici. Dal 2001, ogni generazione di GPU cercò di unire la flessibilità della programmabilità a nuove funzioni eseguibili da questi shaders. Nel 2002, la serie 9000 dell’ATI poteva eseguire matematica complessa sulle unità shaders e quindi le GPU iniziarono a diventare più versatili.
Nvidia con la serie Geforce 8, presentata nel 2006,
introdusse lo shader unificato. Ora le GPU avevano un solo tipo di unità di
calcolo, lo stream processor, chiamato anche CUDA core nel caso delle Nvidia,
in grado di eseguire ogni tipo di operazione volesse, semplicemente
programmandolo in modo opportuno. Da qui
partirono tutti i software in grado di sfruttare le GPU per calcolo generico
attraverso OpenCL, CUDA e DirectCompute, fino ai giorni nostri. L’aumento
prestazionale da una generazione alla successiva era data dall’aumento dei
generici stream processors e dal sottosistema di memoria. In hardware si
implementava il supporto alle DirectX di livello superiore e si costruivano
codificatori e decodificatori video integrati, ma per il resto è sempre stato
il numero di CUDA a farlo da padrone.
Il Ray Tracing prevede una pipeline grafica completamente diversa,non è solo un effetto aggiuntivo |
Se volete sapere di più su GPU e memorie
consiglio di leggere qui.
Ora, sto facendo un discorso semplificato, mi serve giusto comunicare l'idea alla base, on tutti i dettagli. I calcoli generalmente
eseguiti dalle GPU in ambito grafico desktop hanno una complessità FP32, cioè
sono calcoli in virgola mobile a 32bit. I calcoli scientifici possono essere
FP64. Questi richiedono giustamente unità in grado di contenere 64 bit di dati.
Vari chipset di GPU hanno all’interno degli Stream processor diverse unità di
calcolo a seconda del segmento di mercato alle quali sono indirizzate, come
calcolo scientifico o per chipset mobile.
Ultimamente, sono nate nuove branche di calcolo, come quelle
dedicate al deep Learning per le intelligenze artificiali, che richiedono unità
di calcolo ottimizzate per quel tipo di computazione. Richiedono hardware “a
funzione fissa”. Ed Nvidia nelle sue schede grafiche di ultima generazione sta
facendo proprio questo. Sta offrendo due diversi hardware a funzione fissa, che
si affiancano ai classici stream processor programmabili “generici”. In un
certo senso, si sta tornando indietro, ai tempi delle prime schede grafiche
come ho detto poco sopra.
Queste due nuove unità di calcolo sono: i Tensor core ed i
core RT. I primi sono nati per l’intelligenza artificiale. I secondi inseguono
il Sacro Graal della grafica: il ray tracing. Se volete approfondire sul ray
tracing vi rimando a questo mio articolo, ma in ogni caso vi do la versione veloce. Tutta
l’illuminazione nella grafica in tempo reale, quindi nei videogiochi, è finta.
È falsificata. Si usano tecniche per dare l’idea, l’illusione che ci sia
un’illuminazione vera. Il Ray tracing è una tecnica di rendering diversa da
quella attuale, che invece utilizza il tracciamento dei raggi per ottenere
informazioni di illuminazioni vere, fisicamente corrette. Si tratta di una
tecnica incredibilmente pesante e pertanto era usata solo in produzioni
cinematografiche o in campi architetturali/ingegneristici, richiedendo ore ed
ore di rendering su server dotati di
migliaia di processori.
La demo in Ray Tracing di Star Wars di Nvidia, era eseguita in full Hd a 24fps su 4 Titan V. 56 TF di potenza grafica.
La stessa demo, con stessi dettagli oggi riesce a girare su una singola Quadro
RTX 8000. Perché? Perché i moduli RT si
prendono carico del tracciamento dei raggi, liberando i normali shader di
carico di lavoro. Questi moduli sono costruiti appositamente per accelerare
raggi. Sanno fare solo quello e lo sanno fare bene.
La differenza del Ray tracing nelle giuste condizioni può essere drammatica. |
In loro aiuto arrivano i moduli per l’IA, che sono in grado
di fare cosa straordinarie se ben sfruttati. La loro rivoluzione si incentra su
un semplice concetto: la creazione di informazioni che non esistono. Ma andiamo
un attimo con ordine. Ogni elaborazione di un computer opera su dei dati, su
delle informazioni. Più informazioni ho, più i miei calcoli saranno complessi,
ma precisi. Proviamo ad immaginare la risoluzione di un’immagine. Una
risoluzione di 1280x720 indica che ho 921.600 pixel da elaborare. Quando invece
renderizzo un’immagine a 1920x1080, ho 2.073.600 pixel da elaborare. Ho più informazione
e pertanto l’immagine sarà più definita, i particolari dell’immagine si vedranno
meglio.
Ebbene, per alleggerire il calcolo grafico sulle console, si
fa spesso un lavoro di upscaling. Ovvero, io elaboro un videogioco ad una
risoluzione più bassa di quella dello schermo e poi uso degli algoritmi per
aumentare la risoluzione dell’immagine dopo averla prodotta. Immaginate di
avere una sequenza di numeri: 1,2,4,5. Mi manca informazione tra il 2 ed il 4.
Posso usare l’interpolazione lineare per ottenere (2+4)/2 = 3. Se il gap è
maggiore, questa formula non funziona più, ed ho bisogno di altri strumenti per
ottenere i dati che mi servono. Riprendete i dati che ho scritto sopra.
Renderizzare a 720p ed upscalare a 1080p, vuol dire generare 1.152.000 pixel in più. Bisogna riempirli di
informazioni. E le informazioni che devo generare sono addirittura maggiori di quelle
di partenza. Per questo, immagini upscalate, se viste dalla distanza sbagliata,
appaiono sporche e con poco dettaglio. Oggigiorno ci sono molte tecniche di
ricostruzione dei frame, che utilizzano informazioni di più frame per o
upscalare (pensate al checkerboarding usato su console) o applicare filtri di Anti Aliasing per diminuire le scalettature dei
bordi degli oggetti.
L’IA cambia le carte in tavola, perché può essere allenata
precedentemente in scenari senza restrizioni, e poi può colmare i vuoti di
informazioni con parametri estremamente vicini alla realtà. Immaginate di voler
creare un algoritmo di AA che sfrutta l’intelligenza
artificiale. Voi prendete il gioco che vi interessa, e lo fate giocare all’IA a
risoluzioni elevatissime, come 8 ,16 o 32k. Col tempo l’IA capisce come è
composta l’immagine, come gli oggetti si muovono e come interagiscono tra di
loro. Dopo qualche giorno l’algoritmo è pronto. A questo punto può essere usato
su un’immagine in 1080p. L’IA capisce le similarità tra l’immagine che state
vedendo voi sul vostro schermo e quella che ha imparato a 32k. A questo punto
può andare a rifinire l’immagine per renderla più simile a quella a 32k. Il
tutto, senza pesare sul rendering della scena, perché l’algoritmo gira sui core
dedicati all’IA. Questo concetto viene sfruttato dal Ray Tracing di Nvidia e
probabilmente dalla tecnologia DLSS. Con il ray tracing, è possibile tracciare
meno raggi di quelli che servirebbero, con l’IA che riempie i buchi lasciati
dalla mancanza di raggi.
Il DLSS si dimostra potenzialmente interessantissimo, ma si sa ancora poco o nulla. |
Per il DLSS, il nuovo tipo di AA Nvidia basato sull’IA,
non si hanno ancora informazioni precise per via dell’embargo, ma è possibile
ipotizzare che funzioni come ho descritto poco sopra. Dai grafici Nvidia si può
osservare un aumento prestazionale mostruoso quando c’è il DLSS attivo, e
questo potrebbe essere perché in realtà diminuisce la risoluzione di rendering
del gioco, ma il suo algoritmo IA riesce a compensare sul risultato finale,
ottenendo un’immagine migliore di quella renderizzata in modo nativo. Ma
bisognerà aspettare i test eseguiti da testate indipendenti all’uscita delle
schede a settembre.
Tutta roba molto bella, ma dobbiamo ricordarci che ogni era,
ogni epoca, ha la sua buzzword, ha il suo marketing e che le aziende cercano
sempre di promuovere dei loro metodi per realizzare qualcosa, così da vendere i
suoi prodotti. Chi di voi si ricorda del calcolo PhysX? Il calcolo fisico
accelerato dalle GPU? Tutta roba accessoria, adottata da sempre meno persone
fino a praticamente sparire oggigiorno. E che dire dei primi anni delle DX11,
con la tessellatura che era vista come la cura di tutti i mali? Effetto di una
pesantezza tale che viene usato in modo molto pacato oggigiorno, sostituito da
altre tecniche meno dispendiose per dare rilievo alle superfici. Hairworks,
famoso per la sua pesantezza in Witcher , è una tecnica di tessellatura alla
fine del giro. Altre proposte software
sono invece sono rimaste nel tempo, basti pensare all’Ambient Occlusion HBAO o
ai vari tipi di AAtemporale, come il TXAA, che trovano ancora impiego in certi
giochi.
Questa volta il Ray Tracing sembra essere un qualcosa di
più, perché sta venendo implementato nelle API DirectX e Vulkan
indipendentemente dai software Nvidia, quindi la strada sembra tracciata, e
potrebbe essere come tante tecnologie introdotte in una generazione di GPU, ma
che arrivano a fruizione completa solo tra altre 2-3 ricambi tecnologici.
Il chipset Turing è gigante e pieno di nuovi elementi. |
Direi che si può chiudere andando a guardare i prezzi che
Nvidia ha deciso di usare come apertura di questa nuova generazione 20XX e
confrontarli con quelli delle due generazioni passate. Prendiamo la 980, la
1080 e la 2080. Userò come dati il loro valore di boost dichiarato ed il prezzo
di lancio msrp delle non Founders Edition. Il tutto per evitare di complicare
la situazione.
La 980, del 2014, è una scheda da 2048 shaders, 128 TMU e 64
ROPs, operanti a 1216mhz di boost, con 224GB/s di banda passante su 4GB di
GDDR5. Il tutto ad un prezzo di lancio di 549$. Ci prendevamo un chipset da 398mm^1
a 28nm con un TDP di 165W. Pagavamo nel 2014 110$ a teraflop, per una scheda
che ne generava 4.9. Questa è la nostra
scheda di controllo, la baseline.
La 1080, del 2016, è una scheda da 2560 saders, 160 TMU e 64
ROPs, opernti a 1733 mhz di boost, con 320GB/s di banda passante su 8GB di GDDR5x. Il tutto a 599$ di MSRP.Il
passaggio dai 28nm ai 16 nm, permisero di ridurre le dimensioni del chip
rispetto alla 980 a 314mm^2. Stavamo
pagando un 10% in più rispetto alla generazione precedente, per un aumento
prestazionale dell’80% in termini di potenza bruta di calcolo, il raddoppio
della memoria ed un aumento della banda passante del 42%. Siamo arrivai a
pagare 68$ per Teraflop. Ed essendo il
chipset più piccolo, ad Nvidia costava anche di meno produrlo. Insomma, una
situazione Win-Win per tutti. Sappiamo poi che è esplosa la bolla del mining con i prezzi folli, ma
scordandocela, avevamo molto di più per un prezzo molto paragonabile.
La 2080, del 2018, è una scheda da 2944 shaders, 184 TMU, 64
ROPS, 368 Tensor cores, a 1719 mhz di boost, con 448 GB/s su 8GB GDDR6 a 699$
di msrp. Guardando un attimo esclusivamente ai CUDA cores, alle unità di
calcolo usate per ogni tipo di operazione di rasterizzazione delle immagini,
abbiamo un aumento della potenza teorica del 17% in termini di Teraflop. La
banda passante è aumentata del 40% e
questo è di sicuro un vantaggio a risoluzioni elevate. Il prezzo però è
aumentato del 16%, praticamente dello stesso valore dell’aumento di potenza
teorica di calcolo. Se facciamo un calcolo di soldi spesi per teraflops, siamo
rimasti allo stesso livello della 1080, a 69$/TF, 1$ peggio di prima.
Questo proprio perché queste schede, si prefiggono l’obiettivo
di offrire qualcosa di più, di diverso rispetto a prima. 368 Tensor core. Core
RTX in grado di spingere 8Gigarays/s. Numeri che, ad oggi non possiamo
quantificare. Perché si basano su tecnologie future, su applicazioni
ipotetiche. C’è un nutrito numero di giochi, 21 al momento della scrittura, che
offriranno supporto alle nuove tecnologie Nvidia nel breve periodo, ma chi mi
dice che non siano un altro buco nell’acqua? Qui è diverso dai vecchi PhysX. In
quel caso, il calcolo fisico era eseguito dai CUDA, dai processori generici che
già erano sulla scheda. Con questa generazione sto pagando per del silicio che può
rimanere là, inerte, a non fare nulla, a girarci i pollici mentre i CUDA cores
della scheda continuano a svolgere il loro solito compito di rasterizzare l’immagine.
Non facciamoci prendere per i fondelli. Cerchiamo di essere
realistici. Si tratta di tecnologie senza dubbio interessanti. Però il vero
motore tecnologico dell’industria videoludica, rimangono le console. Quando
cambiano le console, ecco che i giochi cambiano volto, facendo dei salti
tecnologici enormi tutti in una volta. Ed il mercato console è in mano ad AMD,
non ad Nvidia. Quindi, a mio parere, l’adozione del Ray Tracing e di altre,
nuove, esoteriche tecniche di calcolo, dipenderà da che funzioni saranno presenti
nelle GPU che animeranno le future PS5 ed Xbox One 2. Fino a quando anche loro
non adotteranno queste tecniche, non ci sarà il cambio totale di paradigma.
Queste schede Nvidia quindi sono più di ogni altra cosa una commessa. Una
scommessa sull’uso di nuove tecnologie, che con il tempo miglioreranno e si
evolveranno, verranno abbandonate. A voi
consumer, la voglia di credere con i nostri soldi in questo progetto futuro. E
chi vivrà vedrà…
Stay Classy, Internet.
Nessun commento:
Posta un commento