Kapitel 5: Graphikhardware und Parallelisierung 1 Überblick Taxonomie für Graphikhardware Historie der Graphikhardware Architektur-Beispiele Programmierbare Hardware Taxonomie von Parallelisierungsansätzen Tiled Displays und Remote Rendering 2
Graphik-Hardware Abbildung der Graphik-Pipeline auf Hardwareund Software-Komponenten Taxonomie nach Akeley (GTXRD) 3 4 Graphik-Hardware Beispiele GTXR-D dummer Framebuffer (z.b. VGA) GTX-RD Rasterop Unterstützung (z.b. SGI O2) GT-XRD T&L Hardware (z.b. SGI RealityEngine, GeForce) G-TXRD Scenegraph-Traversal in Hardware (z.b. E&S) Anforderungen an Geometrie-Subsystem Ca. 100 FLOPs pro Vertex (ca. je 28 für je T&L) Ca. 300 FLOPs pro Dreieck Bei 10 Mio. Dreiecke/s T&L-Leistung ca. 3 GigaFLOPs jedoch nur 500.000 Dreiecke in Szene bei 20 Hz! Anforderungen an Raster-Subsystem >10 Ops pro Pixel (ohne spezielles Texturing) Bei 100 MegaPixel/s Füllrate 1000 MIPS Leistung Bei 20Hz und 10 Pixel/Dreieck: 500.000 Dreiecke pro Frame Bei 1Kx1K Framebuffer 5-fach Overdraw je Pixel
5 20 Jahre Graphik-Hardware 1980er: einfache Rasterisierung (bitblt, Fenster, Geraden, Polygone, Text-Fonts) 1990-95: Geometry-Engines nur bei High-End- Workstations (z.b. SGI O2 vs. Indigo2) ab 1995: neue Rasterisierungsfunktionen (Realismus durch Texturen) z.b: SGI Infinite Reality ab 1998: Geometrie-Prozessor (T&L) auf PC-Graphik 2000: PC-Graphik zieht mit High-End-Performance-Werten gleich, 3D wird Standard im Aldi-PC 2001: PC-Graphik bietet neue Funktionsvielfalt (Multi-Texturing, Vertex- und Pixel-Shader) 2003: Shading Languages: OpenGl 2.0, NVIDIA Cg GPUs > 100 Mio. Trans., 8 Pipes mit 16 Texture Units 2004: NV40 & R420 mit 150 Mio. Transistoren, VS 3.0, PS 3.0, GLSL Implementierungen verfügbar, Überbuffers, Graphik und Parallelität Computergraphik-Hardware war immer parallel intern (auf dem Chip oder Board) mehrere Geometrieeinheiten mehrere Rasterisierer bedienen einen Framebuffer Multi-Pipe Mehrere Graphikkarten in einem System (evtl. SMP) bedienen ein oder mehrere Displays Verteilte Graphik (Distributed Graphics) mehrere Knoten eines eng gekoppelten Graphik-Clusters mit jeweils ein (oder mehreren) Graphikkarten bedienen ein oder mehrere Displays gesteuert von einer Anwendung 6
SGI Onyx Architektur 2 Pipes - Geometry Engines (GE) - Rastermanger (RM) - Display Generator (DG) 7 Aufbau InfiniteReality IR2/3 Geometry Pipe 4 Geometry Engines Raster Manager bis zu 4 RM pro Pipe Fragment Generator Image Engines flexibles Framebuffer- Format Display Generator bis zu 8 Kanäle 8
Trend Graphik-Hardware Schnellere Entwicklung als Moore sches Gesetz Verdopplung der Transistorfunktionen alle 6-12 Monate getrieben durch den Spielemarkt Verbesserung bei Leistung und Funktionalität Texturen, Multi-Texturen, Texture Shader Pixel-Operationen (Transparenz, Blending, Pixel Shader) Geometrie- und Beleuchtungsmodifikation (Vertex Shader) Graphik CPU Leistung Netzwerk Zeit 9 Exponentielles Wachstum NVIDIA GeForce FX 6800U (222M) ATI Radeon X800 XT (160M) transistors (Mio) 120 110 100 90 80 70 60 50 40 30 20 10 NVIDIA GeForce FX 5800 (125M) ATI Radeon 9700 Pro (110M) NVIDIA GeForce4 (63M) NVIDIA GeForce3 (57M) ATI Radeon 8500 (60M) Riva 128 (3M) 0 9/97 3/98 9/98 3/99 9/99 3/00 9/00 3/019/01 3/02 9/02 3/03 time (month/year) 10 6/04
High-end GPU - Characteristika Hersteller: Transistoren Technologie Taktrate Mem Bandbreite Füllrate (peak) Pixel Pipelines Texturen pro Unit FSAA Bits pro Farbkanal Tri transform (peak) Dreiecke (3Dmark) Vertex Shader ATI Radeon 9800 P 107 Mio 0.15 micron 380 MHz 22 GB/s 3 GigaPixel/s 8 8 6x 18 Gsample/s 10 380 Mio 19 Mio 4 Nvidia GeforceFX 5900 U 130 Mio 0.13 micron 450 MHz 27 GB/s 1.8/3.6 GigaPixel/s 4/8 16 4x 27 Gsample/s 10 315 Mio 28 Mio 4+ www.tomshardware.de 11 Nvidia Geforce FX 6800 Vertex Processing Units (6) Fragment Shader Units (16) Raster Operation Units (16) 12
Nvidia Geforce FX 6800 Vertex Processing Unit Fragment Shader Unit Raster Operation Unit 13 Von der Konfigurierbarkeit zur Programmierbarkeit Konfigurierbarkeit : Wähle Hardware-Verarbeitungsoptionen durch State Changes T&L: verschiedene Textur-Koordinaten-Generierungsarten Rasterisierung: Imaging Subset (e.g. Filterung) Fragment-Verarbeitung: verschiedene Blending-Modi Programmierbarkeit : Kleine Programme bestimmen Hardware-Verhalten T&L: Vertex Shader (Vertex-Programme) Rasterisierung: Texture Shader Fragment-Verarbeitung: Pixel Shader (Fragment-Programme) Formuliere Shader in Assembler oder High-Level Shading Language und kompiliere (im Treiber) 14
Programmierbare GPUs (aus dem NVIDIA Cg Manual) 2 or mehr programmierbare Prozessoren in der GPU Statische Pipeline (mit Konfigurierbarkeit) bleibt, wo keine Flexibilität notwendig (oder möglich) 15 Shader Vertex Shader programmierbare Berechnung von Vertex-Attributen alles, was linear dazwischen interpoliert werden kann Vertex-Position, Vertex-Normalen, Vertex-Farben Texturkoordinaten (Environment-Mapping) keine Vertizes können generiert/gelöscht werden keine Information über Topologie Fragment Shader programmierbare Berechnung von Pixel-Attributen alles, was pro Pixel berechnet werden sollte Farben, Normalen, Texturwerte Fragmente können nicht erzeugt bzw. verschoben werden keine Information über zugehörige geometrische Primitive Stream Processing 16
17 Low-level APIs Ähnlichkeit mit Assembler: nahe an der Hardware-Funktionalität Input: Vertex/Fragment-Attribute Output: neue Vertex/Fragment-Attribute Sequenz von Register-Instruktionen Stark beschränkter Kontrollfluss (wenn überhaupt) Plattform-abhängig ABER: Konvergenz! Die low-level APIs von heuer: OpenGL extensions: GL_ARB_vertex_program, GL_ARB_fragment_program DirectX 9: Vertex Shader 2.0, 3.0 Pixel Shader 2.0, 3.0 # c[4] = (1,0.5,0,0) # R2.x = L*N ADD R7,R2.x,c[4].x; # L*N + 1 MUL R8,R7,c[4].y; # (L*N + 1)/2 ADD R9,-R8,c[4].x; # 1 - (L*N + 1)/2 Die low-level APIs von letzten Jahr: OpenGL extensions: GL_NV_vertex_program(1_1), GL_NV_texture_shader(2,3), GL_NV_register_combiners(2), GL_NV_fragment_program, GL_EXT_vertex_shader, GL_ATI_fragment_shader, GL_ATI_text_fragment_shader DirectX 8.0 and 8.1: Vertex Shader 1.0, 1.1, Pixel Shader 1.0, 1.1, 1.2, 1.3, 1.4 High-level APIs Ähnlichkeit zu C/C++ Datentypen (Primitive, Vektoren, Matrizen) Flusskontrolle (if, for, functions) Spezielle Funktionen (dot, lit) Plattform-unabhängig Die high-level APIs dieses Jahres Cg (nvidia) C for Graphics HLSL (Microsoft) High-level shading language, Teil von DirectX 9 OpenGL 2.0 Shading Language ARB Extension in OpenGL 1.5 float4 cspec = pow(max(0, dot(nf, H)), phongexp).xxx; float4 cplastic = Cd * (cambi + cdiff) + Cs * cspec; 18
Vertex-Verarbeitung: Fixed vs. Prog. Konfigurierbare Vertex Pipeline Programmierbare Vertex Pipeline 19 Fixed Function Rasterization Vertex Clamping Rasterisierung 20
Fragment-Verarbeitung: Fixed vs. Prog. Konfigurierbare Fragment Pipeline Programmierbare Fragment Pipeline 21 Syntax der GLSL stark angelehnt an ANSI C Datentypen: float, int, bool vec{2,3,4}, ivec{2,3,4}, bvec{2,3,4} mat{2,3,4} sampler{1,2,3}d void Funktionen main als Einsprungspunkt Parameter in, out, inout, const Übergabe by-value Eingebaute Funktionen Strukturierung Sequenz Selektion (if-else) Schleife (for, white, do-while) Sprünge (return, break, continue, discard) Pragmas 22
Beispiel Vertex- & Fragment-Shader 23 Integration on OpenGL 24
Taxonomie der Graphik-Parallelität Wo wird was sortiert? Bildschirmunterteilung oder Bild-Compositing Sort-First Database Traversal Sort-Middle Database Traversal Sort-Last Database Traversal Preprocessing 3D Primitives Preprocessing Preprocessing G G G G G G G G G G G G 2D Primitives R R R R R R R R R R R R Rendered Pixels Display Display Display 25 [Molnar et al. 94] Sortierungsstrategien Sort-Middle flexibel, verwendet in RealityEngine (Dreiecksbus) ungeeignet für PC, da G und R nicht separierbar Sort-First gut für Bildschirmaufteilung (Multi-Tiled-Display) skaliert gut mit Bildschirmauflösung schlecht für große Szenen Sort-Last erfordert Tiefentest pro Pixel (Depth-Compositing) skaliert gut mit Szenengröße schlecht für hohe Bildschirmauflösung 26
Sort-First Client Phase 1 Servers Phase 2 Display Phase 3 27 Sort-Last Servers Client Phase 1 Peer-to-Peer Communication Phase 2 Display Phase 3 28
Hybrides Sort-First und Sort-Last Unterteile Bildschirm und Szene Clustering von Objekten im Objektraum gemäß ihrer Überlappung im Bildraum (blickpunktsabhängig) weniger redundantes Rendering weniger Compositing überlappender Pixel gute Skalierbarkeit [Samanta et al. 00] 70 60 29 Speedup 50 72% 40 Hybrid 30 45% 20 Sort-Last 10 25% Sort-First 0 0 20 40 60 80 Number of servers Software für Graphik-Cluster WireGL / Chromium (Stanford) App Server App Server.. App Server Server Display Parallel OpenGL Parallel OpenGL [Humphreys 01] 30
Verteilte Graphik für ein Display Graphikkarte übernimmt Teil des Bildes oder der Szene Anschluss (digital) an Hardware-Bildcompositing Prototyp: Lightning-2 von Stanford/Intel Sepia von HP Alternativ: Rücklesen des Framebuffer, Transport über Netzwerk und Zusammenfügen in Software Client Readback Send Client Readback Send Depth Composite Server Render. 31 Readback Client Send Graphikserver Remote Visualization Wie kommt das Bild zum Benutzer? Framebuffer auslesen, komprimieren, senden Interaktion? Spezielle Client-Software? Qualität? Ermöglicht ASP für Pre- und Postprocessing Lösungen: Spezielle Client-Server-Anwendung SGI OpenGL VizServer Generische Lösung basierend auf VNC (Virtual Network Computing), Univ. Stuttgart 32