architetture per la grafica daniele marini corso di programmazione grafica aa2006/2007 tratto da...
TRANSCRIPT
Architetture per la grafica
Daniele Marini
Corso Di Programmazione Grafica aa2006/2007
Tratto da appunti di:Tomas Akenine-Möller
Department of Computer EngineeringChalmers University of Technology
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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”
Programmazione Grafica aa2006/2007 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:
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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
QuickTime™ e undecompressore TIFF (LZW)sono necessari per visualizzare quest'immagine.
Programmazione Grafica aa2006/2007 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
QuickTime™ e undecompressore TIFF (LZW)sono necessari per visualizzare quest'immagine.
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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 !!
Programmazione Grafica aa2006/2007 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)
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 16
Xbox è una macchina UMA
• UMA = unified memory architecture– Ogni componente del sistema accede alla medesima
memoria
Esaminiamo laGPU
Programmazione Grafica aa2006/2007 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!
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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 …)
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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
Programmazione Grafica aa2006/2007 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…