Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica per il tempo Reale Tratto...

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

Transcript of Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica per il tempo Reale Tratto...

Page 1: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Architetture per la grafica

Daniele Marini

Corso Di Programmazione Grafica per il tempo Reale

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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 8

Sort-middle

• Ordina dopo G prima di rasterizzare (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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 colore finale per il pixel

Page 20: Architetture per la grafica Daniele Marini Corso Di Programmazione Grafica per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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 per il tempo Reale Tratto da appunti di: Tomas Akenine-Möller Department of.

Programmazione Grafica 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…