27
Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology

Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Embed Size (px)

Citation preview

Page 1: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Architetture per la grafica

Daniele Marini

Corso Di Programmazione Grafica aa2007/2008

Tratto da appunti di:Tomas Akenine-Möller

Department of Computer EngineeringChalmers University of Technology

Page 2: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 2

Aspetti considerati

• Ricordare i problemi di texturing prospettico

• Ricordare le trasformazioni geometriche per il rendering

• L’architettura di XBOX• L’architettura di KYRO

• C’è in giro molta documentazione su HW grafico, cercare qui: www.realtimerendering.com

Page 3: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 3

Aspetti generali

• L’evoluzione delle recenti architetture grafiche parte dalla fase finale della pipeline– Si è aggiunto all’HW la rasterizzazione (il maggiore

aumento di prestazioni deriva da questo)– Poi si è rivisto lo stadio di geometria– L’applicazione non è stata ancora messa in HW!

• Due vie principali per migliorare le prestazioni:– Pipelining– Parallellizazione– Combinazione dei due fattori

Page 4: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 4

Sulla pipeline• Nella GeForce3: 600-800 stadi di pipeline!

– 57 millioni di transistor– Pentium IV: 20 stadi, 42 millioni transistor

• Schede recenti:– Radeon 9700: 110M transistor– GeForce FX 5800: 125 M transistor, 500 MHz

• Idealmente: n stadi accrescono il throughput di n volte– Ma aumenta la latenza!– Comunque non è ancora un problema:

• Consdieriamo un chip con una frequenza di circa 200 MHz (5ns per clock)• 5ns*700=3.5 ms di latenza complessiva• Ma abbiamo circa 20 ms per frame (50 frames per secondo)

• HW grafico è semplice da organizzare in pipeline perchè:– I pixel sono per lo più independenti l’uno dagli altri– Pochi test e funzionalità molto precise– Non è necessaria una frequenza troppo elevata: il collo di bottiglia è la

banda passante per la comunicazione con la memoria• Questo sta cambiando con il crescere della programmabilità

– È semplice prevedere i meccanismi di accesso a memoria, e quindi fare un ” prefecthing”

Page 5: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 5

Parallellismo

• Idea semplice: calcola n risultati in parallalo e combinali alla fine

• GeForce FX 5800: 8 pixels/clock, 16 textures/clock– Con una pipeline di parecchi gruppi a 100 stadi si possono

processare molti pixel insieme

• Non è sempre semplice!– Provate a parallelizzare un algoritmo di sort …– Ma i pixel sono tra loro indipendenti, e quindi per la grafica è

più semplice

• Si può parallelizzare sia la geometria sia la rasterizzazione:

Page 6: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 6

Classificazione dei tipi di hardware

• È necessario computare un sort dallo spazio modello allo spazio schermo

• Quattro alternative principali:– Sort-first– Sort-middle– Sort-Last Fragment– Sort-Last Image

Page 7: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 7

Sort-first

• Ordina le primitive prima dello stadio di geometria

• Schermo suddiviso in grandi regioni• Ogni singola pipeline è responsabile di

una regione

• G è lo stadio geometrico• FG fragment generator, parte della

rasterizzazione, trova quali pixel sono interni a un triangolo

• FM fragment merge, assembla i frammenti nei vari buffer (Z-buffer, colore)

• Architettura inusuale e poco usata

Page 8: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 8

Sort-middle

• Ordina dopo G prima di R• Naturale, perché dopo G conosciamo

le posizioni dei triangoli nello spazio schermo

• Suddividi il lavoro tra le varie unità G• Lo schermo può esser suddiviso in

“piastrelle” (es. 4x4 pixel, oppure in n linee di scansione)

• R è responsabile del rendering entro una piastrella

• Triangoli comuni a due regioni sono inviate ai due R responsabili

Page 9: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 9

Sort-Last Fragment

• Ordina tra FG e FM• XBOX adotta questo schema!

• Suddividi il lavoro tra le G• Il risultato si invia a FG• I frammente sono quindi ordinati prima di

inviarli a FM– Ogni FM è responsabile di una piastrella di

pixel

• Un triangolo è spedito a un solo FG, si evita di duplicare il lavoro

Page 10: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 10

Sort-Last Image• Ordina alla fine della pipeline• Ciascun FG & FM ha un frame

buffer separato per l’intero schermo (Z e colore)

• Dopo che tutte le primitive sono state spedite alla pipeline z-buffer e color buffer sono fusi in un solo color buffer

• Può essere visto come un insieme di pipeline indipendenti

• Richiede enorme memoria!• Usato per ricerca ma non

commercialmente

Page 11: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 11

La banda passante per la memoria è enorme!!

• R lettura, W scrittura, T texture, Z è Z-buffer, C è color buffer

• Supponendo 2 texture per pixel, e il costo TR 24 byte (triline MIP-mapping), il resto costa 32 bit (4 byte)

• Un pixel normale costa:• ZR+ZW+CW+2*TR=60 byte per pixel

• Se vogliamo 60 fps, 1280x1024: 4.5 Gb/s• Ma un pixel viene sovrascritto molte volte!• Se la sovrascrittura è 4 volte, si ha: 18 Gb/s !• Supponiamo una DDRAM a 300 MHz, 256 bit per

accesso: 9.6 Gb/s• 18>9.6 !!

Page 12: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 12

Banda passante• 18>9.6• L’uso di banda non è mai al 100%,

possiamo inoltre usare molte texture, anti-aliasing, che richiede ancor più banda

• Ci sono molte tecniche per ridurre l’uso di banda:– Texture caching e prefetching– Compressione delle Texture– Z-compression– Z-occlusion testing (HyperZ)

Page 13: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 13

Z-occlusion testing e Z-compression

• Un modo per ridurre la banda– ATI Inc., ha esplorato per primo questa strada

con la tecnologia HyperZ

• Molto semplice e molto efficace– Dividi lo schermo in piastrelle di 8x8 pixels– Mantieni uno stato della memoria sul chip– Accesso molto veloce– Memorizza altra informazione richiesta da

questo algoritmo

• Abilita occlusion culling sui triangoli, z-compression, e Z-clear veloce

Page 14: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 14

• Memorizza zmax per tile, e un flag (se è compresso/non-compresso)

• Rasterizza una piastrella per volta• Test: se zmin sul triangolo è maggiore di zmax

della piastrella– Se sì non far nulla!!!– Salva la texture e z-read per l’intera piastrella–

enorme risparmio!• Altrimenti leggi Z-buffer compresso e decomprimi• Scrivi Z-buffer non-compresso, quando hai finito

comprimilo e spediscilo indietro alla memoria, aggiorna zmax

• Per Z-clear fast: setta un flag a”clear” per ciascuna piastrella– Non dobbiamo leggere dallo Z-buffer, basta

spedire lo Z pulito per quella piastrella

Page 15: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 15

Xbox game console

• Costruita da Microsoft e NVIDIA

• È quasi un PC:– Pentium III, 733 MHz– GeForce3 estesa

• Perché una console?– Resta stabile …– Non devi preoccuparti

di 20 differenti schede grafiche e di CPU che vanno da 100 MHz a 2GHz

Page 16: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 16

Xbox è una macchina UMA

• UMA = unified memory architecture– Ogni componente del sistema accede alla medesima

memoria

Esaminiamo laGPU

Page 17: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 17

geometry stage• Dual vertex shaders

– La stessa procedura su un vertice è eseguita due volte in parallelo

– Vertex shader è una SIMD opera su 4 componenti per volta

– Invece di uno stadio geometrico con funzione fissata, abbiamo pieno controllo sulla animazione dei vertici, lighting etc.

• Usa DMA (direct memory access), la GPU invia i vertici direttamente dalla memoria!

• 3 differenti caches – per prestazioni migliori!

Page 18: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 18

geometry stage:le cache

• Pre T&L (transform & lighting)– Memorizza i vertici inviati dalla memoria

• Evitare invii inutili

– In media un vertice è condiviso da 6 triangoli– Ha 4 kbyte di memoria locale

• Post T&L cache:– Evita di lavorare più di una volta su ogni vertice– Ha memoria sufficiente per 16 vertici trasformati

• Primitive Assembly cache:– Un vertice trasformato richede un sacco di memoria, ci vuole

tempo per fetchare un vertice dalla Post T&L cache– Può salvare 3 vertici completamente shaded– Esiste per evitare fetch da Post T&L

• Il compito della cache PA è di inviare i triangoli al rasterizzatore

Page 19: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 19

rasterizer• Primo blocco: trianglesetup

(TS) and FG

• Sorting è fatto dopo FG• Architettura del tipo Sort-

last

• 2 texture unit TX• RC (register combiners) opera sui valori di texel

filtrati dal TX e dallo shading interpolato sui triangoli (è programmabile)– Può esser usato ad es. per bump mapping

• Infine i risultati da TX, RC, shading interpolation, fog interpolation è fuso da FM in un color finale per il pixel

Page 20: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 20

textureswizzling

• Una tecnica di accesso che si usa ad es. per filtraggio bilineare

• Questa è una curva di ”riempimento del piano” (simile alla curva di Peano) usata per sfruttare la coerenza spaziale tra pixel

Page 21: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 21

Xbox conclusioni

• (Quasi) un PC con un grande HW grafico

• Architettura del tipo Sort-last fragment

• 2 vertex shaders• 4 pixel pipelines @ 250 MHz• Programmabile per pixel• Una dellle migliori console attuali

(per ora …)

Page 22: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 22

KYRO – una architettura differente

• Basata su architettura PowerVR (StMicrolectronics)• Basata su piastrelle

– KYRO II: 32x16 pixels• Differenze fondamentali

– Per l’intera scena esegui:• Trova tutti i triangoli interni a ciascuna piastrella• Renderizza tutti i triangoli interni ad essa

• Vantaggi: può implementare colori temporanei, stencil, e Z-buffer su una veloce memoria on-chip

• Risparmia memoria e banda di comunicazione con memoria centrale!– Il produttore dichiara di risparmiare 2/3 della banda usuale

rispetto ad architetture tradizionali (senza test di Z-occlusione)

– http://www.dansdata.com/prophet4500.htm

Page 23: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 23

KYRO: panoramica

• CPU invia dati dei triangoli a KYRO II• Tile Accelerator (TA)

– Deve avere l’intera scena prima di far partire i blocchi ISP e TSP

– Mentre ISP e TSP lavorano, TA lavora sull’immagine successiva (lavorano in modo pipeline)

– TA ordina i triangoli e crea una lista di puntatori a triangoli per ciascuna piastrella

Page 24: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 24

KYRO• Tile accelerator (TA):

– Quando tutti i triangoli della scena sono ordinati nelle piastrelle, TA spedisce i dati al blocco ISP

– TA continua sul frame successivo, ed esegue il sorting in parallelo

• Image synthesis processor (ISP):– Implementa Z-buffer, color buffer, stencil buffer per la

piastrella– Esegue occlusion culling (simile al test Z-occlusion)

• Testa 32 pixels per volta nello Z-buffer• Registra quali pixel sono visibili

– Raggruppa i pixel con la stessa texture e li invia al TSP• Questi pixel sono certamente visibili, quindi si calcola la

texture una solva volta per ciascun pixel

Page 25: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 25

KYRO: TSP• Texture and Shading Processor (TSP):

– Gestisce texturing e interpolazione di shading

• Ha due pipeline che lavorano in parallelo– 2 pixels per clock

• Può usare al più 8 texture– Viene implementato con una specie di ”loop” nel TSP

• I dati texture sono prelevati dalla memoria locale

• Supersampling: 2x1, 1x2, and 2x2– Renderizza un’immagine a dimensione maggiore e la

filtra scalandola– Nel caso 2x2 occorre solo 4x la dimensione della

piastrella, ovvero rende 4x le piastrelle ma non richiede 4x la memoria

Page 26: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 26

KYRO: vantaggi e svantaggi

• Usa una piccola memora aggiuntiva molto veloce– Riduce notevolmente la banda necessaria– Riduce notevolmente la memoria buffer

• Ma richiede maggiore memoria locale– Per l’ordinamento delle piastrelle

• Questo limita il numero di triangoli che si possono elaborare– 3 MB possono gestire circa 30,000 triangoli

Page 27: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica aa2007/2008 Tratto da appunti di: Tomas Akenine-Möller Department of Computer

Programmazione Grafica aa2007/2008 27

Il futuro?• Progettare unanuova architettura per la global

illumination• Pochi si sono occupati di algoritmi basati su”ray

tracing”• Altre cose utili:

– Test rapido di intesezione tra superfici curve in HW– Attraversamento rapido di una struttura dati spaziale– Gestire scene molto grandi

• HW standard può lavorare già abbastanzza bene percheè vengono scartati triangoli che sono già stati elaborati

• Gli algoritmi di ray tracing non possono avere questo vantaggio, perchè sono globali, e devono conoscere l’intera geometria

– Photon mapping…