1 / 27

Architetture per la grafica

Corso Di Programmazione Grafica. Architetture per la grafica. Daniele Marini. Tratto da appunti di: Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology. Aspetti considerati. Ricordare i problemi di texturing prospettico

uri
Télécharger la présentation

Architetture per la grafica

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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

  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

  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

  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

  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

  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 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 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 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 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 !! 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) 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 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 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 Programmazione Grafica

  16. Esaminiamo la GPU Xbox è una macchina UMA • UMA = unified memory architecture • Ogni componente del sistema accede alla medesima memoria 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! 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 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 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 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 …) 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 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 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 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 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 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… Programmazione Grafica

More Related