1. Architettura Polaris - Parte prima
La principale novità costruttiva dell'architettura Polaris è sicuramente il processo produttivo FinFet LPP a 14nm e non possiamo che essere d'accordo con quanto sottolinea AMD riguardo il raggiungimento di questo traguardo: un strada molto lunga.
Erano infatti ben cinque anni che non c'erano novità a livello di processo produttivo per le GPU, un ciclo di refresh particolarmente lungo se confrontato con il passato, dove il passaggio tecnologico avveniva su base annuale o al più ogni due anni.
Dobbiamo ovviamente ricordare come il problema sia stato "condiviso" con NVIDIA, che ha dovuto anch'essa attendere lo stesso lasso di tempo ma che, comunque, è riuscita, nel frattempo, a migliorare la propria linea GPU e a infliggere un deciso distacco alle soluzioni AMD.
Le fondamenta su cui si basa Polaris sono quelle tracciate con l'introduzione dell'architettura Graphics Core Next, giunta per l'occasione alla quarta generazione, in cui sono state introdotte numerose migliorie e funzionalità .
Niente stravolgimenti eccessivi rispetto a quanto introdotto all'epoca di Tonga, ma un continuo affinamento ed un'attenzione sempre maggiore alle nuove e future tecnologie, ai problemi dei consumi e all'efficienza generale della GPU.
Come si può notare, infatti, AMD si è concentrata molto per migliorare quest'ultimo aspetto sia in termini di assorbimento che in termini di sfruttamento delle risorse disponibili, ponendo particolare attenzione agli aspetti legati alla realtà virtuale e alla gestione dei formati video e dei display di nuova generazione.
Considerando dunque la stretta parentela che lega le precedenti GPU alle nuove Polaris passiamo subito al consueto diagramma a blocchi dell'architettura, punto di partenza ideale per andare poi a mettere in evidenza i passi avanti fatti da AMD.
Come si vede Polaris dispone di quattro unità ACE (Asynchronous Compute Engine - unità computazionali asincrone), di due unita di scheduling hardware (HWS), la prima novità rispetto alle precedenti GPU, di un Graphics Command Processor e di una porzione di memoria condivisa tra i quattro Shader Engine, i macroblocchi principali dove avvengono tutte le operazioni sui pixel.
Ogni Shader Engine comprende un Geometry Processor, un'unità di rasterizzazione, 2 unità di render back-end (erano 4 in Fiji) in grado di renderizzare 4 pixel per clock ciascuna e 9 Compute Unit che racchiudono 64 Stream Processors e 4 unità di texturing.
Facendo quindi le debite moltiplicazioni, otteniamo i 2304 Stream Processors (64x9x4), le 144 TMU (4x9x4) e le 32 ROP (2x4x4) che compongono Polaris 10.
Il tutto è servito da una cache L2 da 2MByte collegata tramite 8 controller a 32 bit con design rinnovato al framebuffer video che, per Polaris 10, può essere di 4 o 8GB di GDDR5 a 8GHz per un valore massimo di 256 GB/s di banda passante.
Nel dettaglio la composizione delle unità CU di Polaris che possono vantare, rispetto a quelle presenti nelle GPU con GCN 1.2 e 1.3, un nuovo instruction prefetcher, una maggiore efficienza di utilizzo degli Shader e nuovi motori di calcolo delle geometrie che forniscono, stando a quanto ha indicato AMD, un incremento di prestazioni del 15% rispetto alle CU delle soluzioni Hawaii (serie 290).
Per raggiungere tale incremento sono state apportate migliorie nella fase di prefetch, per cui è stata aumentata l'efficienza del sistema di caching in modo da ridurre le fasi di stallo della pipeline e rendere più fluida la gestione delle istruzioni, è stata aumentata la dimensione del buffer delle istruzioni per migliorare le prestazioni single thread, è stato introdotto il supporto nativo per istruzioni FP16 e Int16, che permette di velocizzare l'elaborazione dei calcoli riducendo l'utilizzo di memoria e il continuo ricorso ai differenti registri permettendo così un buon risparmio energetico, e modificato il comportamento della cache L2, di cui è stata anche raddoppiata la dimensione, come detto a 2MB.
Per quanto concerne invece i quattro Geometry Processors AMD ha introdotto un nuovo Primitive Discard Accelerator che elimina dalla pipeline di rendering i triangoli con area pari a zero o che non contengono dei sample points di tipo inclusivo, quelli utilizzati per il calcolo dell'antialiasing, permettendo di avere una maggiore efficienza prestazionale in quanto i dati da elaborare vengono subito ridotti a quelli effettivamente necessari alla creazione della scena.
Come si evince dalla slide i benefici prestazionali del Primitive Discard Accelerator risultano più evidenti con tassellazione e AA 4X attivi.
Sempre a livello di geometry engine è stata introdotta anche una nuova cache per gli indici dedicata alle geometrie di piccole dimensioni che, riducendo il traffico dei dati all'interno della GPU, permette di liberare risorse in termini di banda passante occupata permettendo, quindi, di migliorare il throughput complessivo delle primitive geometriche principali.
Per quanto concerne invece la gestione delle risorse disponibili, meritano sicuramente una menzione le migliorie introdotte con Polaris riguardo la gestione del buffer video.
AMD ha infatti ridisegnato i controller di memoria per implementare il supporto alle GDDR5 a 8GHz (garantendo così 256 GB/s di banda passante) e introdotto un nuovo motore di Delta Color Compression delle texture con supporto a fattori di compressione completa 2/4/8:1.
Questa soluzione garantisce ovviamente un miglior sfruttamento della banda passante sia in termini di prestazioni sia di efficienza dei consumi, oltre a garantire una maggior durata dei chip di memoria ed un guadagno, a livello di picco, di quasi il 40% in caso di dati comprimibili rispetto alle vecchie schede serie 290.
Come detto in precedenza, AMD ha inoltre raddoppiato la cache L2 delle GPU Polaris in modo tale da ridurre le chiamate e quindi il traffico verso il frame buffer così da aumentare i benefici del nuovo motore di Delta Color Compression e migliorare l'efficienza energetica della scheda, con un risparmio sulla potenza necessaria alle transazioni verso la memoria quantificabile sino a un 40% in meno rispetto alla precedente generazione di fascia media.
Per quanto concerne invece il comportamento in ambito Async Compute, AMD ha introdotto due hardware scheduler programmabili in grado di gestire le risorse sia dal punto di vista temporale che spaziale in tempo reale, andando quindi a riallocare, riorganizzare e bilanciare in maniera dinamica i carichi di lavoro, siano essi di tipo grafico o computazionale, sulla GPU.
L'architettura Polaris massimizza poi l'efficienza in ambito Async Compute utilizzando una nuova tecnica di qualità del servizio (QoS) definita Quick Response Queue, che permette agli sviluppatori di "marcare" i compute task come processi ad elevata priorità tramite le API.
Ovviamente task a bassa e alta priorità coesistono all'interno del flusso di operazioni da eseguire e condividono le risorse di calcolo della GPU, ma HWS e ACE sono "istruiti" per allocare maggiori risorse di calcolo per elaborare i task ad elevata priorità prima di tutti gli altri in modo tale che siano ultimati per primi evitando, al contempo, che i Command Processors escludano i task a minor priorità garantendo, di conseguenza, la massima flessibilità di utilizzo delle risorse disponibili.
Da questa slide possiamo apprezzare la versatilità e flessibilità di funzionamento delle unità ACE di Polaris con task grafici e computazionali concorrenti in situazione di prelazione dei primi e con la tecnica Quick Response Queue attiva per quelli più sensibili alla latenza di generazione dei frame.
Questa tecnica viene utilizzata, a titolo di esempio, dal software development kit AMD LiquidVR per dare priorità alla funzionalità di time warping, estremamente sensibile al jitter e alla latenza, in modo tale che sia completata immediatamente prima della sincronizzazione verticale del frame.