L'architettura
Raggiungere i cinque obiettivi prefissati ha richiesto notevoli modifiche all'architettura ATI, anche se molti spunti derivano dalla serie Radeon HD 4800.
Il cuore di RV870 - cliccare sull'mmagine per ingrandirla
Prima di parlare delle potenzialità shader della GPU, dobbiamo dare un'occhiata al motore grafico, che include il motore di tessellation ATI di sesta generazione. In passato, abbiamo sentito l'azienda evangelizzare la tessellation. Come molti altri concetti applicati a un unico produttore, l'impiego di questa tecnica con i giochi attuali è molto limitata. Ora è parte della pipeline DirectX 11, affiancata dalle hull e domain shader. Il tessellator è un componente che può essere usato oppure o no, in base alla tecnica di tessellation in gioco.
Stream core
Come scritto precedentemente, l'organizzazione dei core stream di ATI non è cambiata, anche se ora le unità operano in maniera più efficiente. Abbiamo già stabilito che l'architettura ATI VLIW dipende da un efficiente compilatore se vuole massimizzare le prestazioni - altrimenti le ALU si troveranno in idle. Con l'RV770, ognuna delle cinque istruzioni del VLIW deve essere indipendente dalle altre. Cypress è in grado di eseguire una moltiplicazione e un'addizione in maniera indipendente dal risultato dell'operazione precedente nello stesso ciclo. Prendiamo questo esempio:
a=b*c;
d=a+x;
Queste operazioni non sarebbero capaci di condividere lo stesso insieme istruzione su RV770, ma su RV870 possono, poiché sono trasformate in un'operazione MAD, e conservano il risultato per l'operazione di moltiplicazione intermedia. Similarmente, RV770 aveva solo un'istruzione DP4 (4-component scalar product), con le istruzioni DP2 e DP3 implementate usando DP4. Il risultato di quel design era che alcuni slot dell'insieme erano sprecati su operazioni non necessarie. AMD afferma che amministrare gli scalar products è oggi più flessibile, anche se non ha fornito dettagli. Possiamo supporre che gli ingegneri abbiano implementato istruzioni DP2 e DP3 nativamente per permettere l'esecuzione di altri calcoli in parallelo.
Cliccare sull'immagine per ingrandirla
È stata cambiata anche l'amministrazione delle operazioni sugli interi. Prima ognuno dei quattro 4 stream core poteva eseguire un'addizione o un'operazione di bit shift per ciclo su un integer a 32-bit, e il core special-function poteva realizzare una moltiplicazione o un bit shift, anche su un integer a 32-bit. Ora i quattro core sono capaci di realizzare una moltiplicazione o un'addizione per ciclo, ma solo su integer a 24 bit. Questa scelta è il risultato di un compromesso tra l'incremento di prestazioni generali e la volontà di non sacrificare troppe risorse per eseguire il calcolo, come avrebbe richiesto avere un moltiplicatore completo integer a 32-bit per ognuno dei quattro stream core. Limitandosi a 24-bit, gli ingegneri possono usare le risorse per amministrare i calcoli in virgola mobile a singola precisione mentre, coprendo ancora la maggioranza di casi d'uso degli integer in uno shader.
Oltre a queste ottimizzazioni, gli ingegneri hanno introdotto due nuove istruzioni: una FMAD (fused multiply-add instruction) che mantiene interamente la precisione del calcolo e un compie un singole arrotondamento finale, a differenza di una multiply-add standard (MAD), che compie due arrotondamenti. La seconda istruzione è una somma di differenze assolute (SAD) - un'operazione frequentemente usata nel video, in particolare per confrontare blocchi di pixel. Abbiamo verificato questi incrementi nella potenza di calcolo usando differenti shader. I test sono nella pagina seguente.