Genere
ND
Lingua
ND
PEGI
ND
Prezzo
ND
Data di uscita
ND

ATI Radeon X1800

Anteprima

ATI Radeon X1800, X1600 e X1300

Finalmente ATI. La società canadese presenta il suo nuovo prodotto di punta, il tanto atteso R520, dopo un ritardo di qualche mese per problemi produttivi, e lo affianca alle soluzioni di fascia media e fascia bassa basa, lanciando per la prima volta in contemporanea l'intera famiglia basata sulla nuova architettura. E i presupposti per il successo ci sono tutti.

di Antonino Tumeo, pubblicato il

Queste novità rendono, in breve, la architettura estremamente efficiente, particolarmente adatta al calcolo in floating point con precisione a 32 bit senza alcun rallentamento e ad una efficace gestione del controllo di flusso dinamico nei Pixel Shader, una delle caratteristiche più rilevanti dello Shader Model 3.0. Sono fattori che rendono anche questa architettura apprezzabile anche per l'utilizzo nel calcolo general purpose. Abbiamo avuto modo di vedere una demo tecnica che eseguiva simulazione fisica utilizzando la GPU e abbiamo discusso approfonditamente con uno dei maggiori ricercatori nell'ambito del calcolo general purpose su chip grafici (Mike Houston della Stanford University), ed è apparso subito chiaro come questa sia una direzione che ATI intende seguire e come i prodotti della serie X1000 abbiano le potenzialità per rivelarsi il primo vero esempio di questo tipo.
Gli aspetti innovativi della nuova architettura ATI non si esauriscono qua però... Infatti, se il primo elemento di mancata efficienza, e cioè l'esecuzione dei Pixel Shader, in particolare con controllo di flusso dinamico come previsto nello Shader Model 3.0, viene risolto con il meccanismo di threading, è rivisto radicalmente anche il secondo elemento tipicamente critico per i chip grafici, e cioè quello del controller di memoria.

IL SIGNORE DEGLI ANELLI

Che la banda di memoria continui a rimanere un problema per le schede grafiche, e che il problema con il crescere delle prestazioni dei chip grafici continui solo a peggiorare, non è certo un mistero. La crescita delle frequenze delle memorie e la rivisitazione delle cache integrate all'interno delle architetture grafiche non basta a tenere il passo dell'aumento delle prestazioni. GeForce 7800 GTX è sicuramente un esempio, visto che NVIDIA non ha ritenuto necessario aumentare il numero dei Render Output pur avendo aumentato il numero delle fragment pipeline e migliorato la loro architettura. Aumentare l'ampiezza del bus della memoria è difficilmente pensabile, considerando che ciò causerebbe un notevole aumento dei piedini del chip e di conseguenza dei costi del chip stesso. Paradossalmente integrare poi un controller di memoria molto complesso, per cercare di soddisfare delle pretese prestazionali può creare degli svantaggi in fase di determinazione di clock del chip, a causa della grande concentrazione di connessioni al suo intorno.
Per raggiungere il suo obiettivo di efficienza dunque ATI ha deciso di operare in maniera profonda proprio sul controller di memoria. In primo luogo, pur mantenendo i classici bus da 256 bit per il prodotto di punta, 128 per quello di fascia media, e 128 o 64 per i prodotti di fascia bassa, ha scelto di ridurre da 64 a 32 bit la granularità di un singolo accesso in memoria. Ciò significa che ogni operazione di lettura e scrittura in memoria può essere limitata a soli 32 bit, e fino a 8 diverse operazioni di lettura e scrittura possono essere portate aventi contemporaneamente. In secondo luogo ha garantito il supporto per memorie DDR2, GDDR3 ed è già pronta per GDDR4 (evidentemente contare sul direttore del pannello del JEDEC che si occupa della standardizzazione di questo tipo di memorie, Joe Macri, aiuta). Su queste basi ha poi realizzato una soluzione di connessione tra le memorie e le diverse unità che vi accedono completamente nuova, costituita da un Ring Bus. Un grande e veloce bus interno da 512 bit (256 bit nei chip di fascia più bassa) è usato per distribuire i dati efficientemente alle diverse unità che hanno fatto richiesta di accesso in memoria. Questo bus è disegnato sul bordo esterno del chip per semplificare il routing delle connessioni e fornire un segnale più pulito alle alte frequenze di clock.
È costituito da due anelli a 256 bit (128 bit) direzionati uno all'opposto dell'altro (per ridurre la latenza) e di quattro ring stop, uno per ciascun paio di canali di memoria. Questo meccanismo prevede che un client faccia una richiesta al controller di memoria, il controller raccolga e prioritizzi le richieste in base a determinati pesi dati ai client, e che infine il controller stesso invii le richieste ai dispositivi di memoria. Le unità di memoria piazzano a questo punto il dato richiesto sul ring bus, che si propaga fino al ring stop più vicino al client permettendogli di caricarlo. I pesi dei client sono determinati tramite degli algoritmi di apprendimento, che valutano numerose informazioni sul client quando esso esegue le richieste di lettura o scrittura e sfruttano i risultati delle esecuzioni precedenti per migliorare la loro accuratezza e permettere al sistema di adattarsi nel corso dell'esecuzione. I parametri sono anche in larga parte configurabili via software, cosa che dunque permette di adattarli ad hoc a seconda del programma in esecuzione. Per quanto un sistema di questo genere permetta un sostanziale miglioramento dell'efficienza del sistema di memoria, il metodo migliore per ridurre la latenza di accesso alla memoria stessa rimane quello di non... accedervi. È infatti preferibile salvare dati frequentemente acceduti in cache poste sul chip che consentano ai diversi client utilizzarli molto rapidamente. ATI ha dunque deciso che il suo design dovesse migliorare anche l'efficienza delle cache, ed ha scelto la strada di passare da cache direct mapped o con associatività a N vie (dove l'N non è mai stato precisato per motivi di convenienza), direttamente ad una soluzione completamente associativa. Una cache Direct Mapped salva indirizzi da blocchi di memoria predeterminata, una con associatività a N vie può salvare N blocchi diversi e una completamente associtativa può salvare in una qualsiasi delle sue linee qualsiasi posizione dalla memoria principale. Quest'ultima soluzione, adottata nella famiglia X1000 di ATI per le cache di texture, colore e depth/stencil buffer, consente di ottenere una performance più elevata fino al 25% ad una data frequenza in situazioni con sfruttamento intensivo della banda.
Ottimizzazioni hanno ricevuto anche le tecnologie di compressione adottate da ATI nelle sue precedenti architetture. In particolare 3Dc, l'algoritmo di compressione delle normal map è stato migliorato e ora può fornire, oltre a rapporti di 4:1 per mappe con due componenti intere da 8 bit, rapporti di 2:1 per mappe con singola componente di colore. Ricordiamo che le Normal Map sono una particolare tipologia di texture il cui valore indica la direzione della normale del texel sulla superficie della texture stessa, e non vengono compresse in maniera adegutata (cioè con una perdita qualitativa troppo elevata) utilizzando i classici algoritmi DirectX Texture Compression (DXTC) e S3TC, molto più adatti per le classiche texture e in grado di raggiungere rapporti di 8:1.
Sempre presente la compressione del Color buffer con un rapporto che può arrivare a 6:1, utile ad esempio nella gestione dell'antialiasing in multisampling: quando vengono calcolati gli ulteriori campioni del pixel, se le informazioni di colore sono identiche, risulta poco conveniente salvarle, anche se è comunque necessario conoscerle per generare l'informazione finale. Dunque il frame buffer viene salvato in forma compressa per ridurre la sua occupazione.
Sono state ulteriormente migliorati anche gli algoritmi di gestione di Z e Stencil Buffer, i buffer utilizzati per salvare le informazioni relative alla profondità dell'immagine. Lo Z buffer, in particolare, contiene le profondità relative ai pixel in fase di rendering, mentre lo stencil buffer viene venire utilizzato per tenere "nota" di particolari zone dell'immagine, ad esempio per la creazione delle ombre, e utilizzare i questi dati come termini di confronto durante il rendering di una scena.
Da tempi ormai lontani ATI riunisce le tecnologie di ottimizzazione di Z e Stencil Buffer sotto il nome HyperZ. Si tratta di Hierarchical Z, Early Z, Z Compression e Fast Z Clear, ed alcune di esse hanno subito un "restyling" sulla nuova architettura.
Hierarchical Z è la componente che esegue l'occlusion culling, che cioè si preoccupa di scartare i pixel di un poligono se risultano "occlusi", cioè coperti da altri pixel, per evitare passaggi di rendering inutili. La funzione è realizzata eseguendo confronti dei dati del nuovo poligono con i dati contenuti nello Z Buffer, partendo da un confronto con blocchi molto grossi e riducendo via via la loro grandezza. L'algoritmo di visibilità utilizzato sulla nuova architettura prevede delle ottimizzazioni che permettono, nei casi migliori, di rilevare il 50% in più di pixel nascosti rispetto ai precedenti chip grafici, risparmiando dunque banda di memoria (poiché i pixel nascosti non devono essere salvati in memoria).
Di solito il confronto di visibilità avviene al termine del processo di shading. Early Z è la funzionalità che permette di eseguire il confronto prima dell'esecuzione delle funzioni di rendering, se è noto che l'esecuzione degli shader non produrrà un cambiamento delle informazioni di profondità. La tecnica consente di risparmiare non solo banda, ma anche considerevoli quantitativi di potenza di rendering se ben utilizzata.
Siccome le informazioni di Z e Stencil possono occupare uno spazio consistente (ci sono dati per tutti i campioni dei pixel dell'immagine), può essere positivo sfruttare meccanismi di compressione. Z Compression adempie esattamente a questo scopo, fornendo rapporti di compressione (lossless) che possono arrivare fino ad 8:1.
Dopo il rendering di un'immagine, Z e Stencil Buffer devono essere "ripuliti". L'operazione viene effettuata di solito scrivendo nei buffer un valore di default, ma eseguire un'operazione alla volta può portare a consumo di bandwidth dovuto alle numerose scritture in memoria. Fast Z Clear, cancellando grossi blocchi del buffer per volta riduce la banda richiesta per questa operazione fino a fattori di 64.