Teil 6
Transcrição
Teil 6
Kapitel 5: Graphikhardware und Parallelisierung 1 Überblick • • • • • • 2 Taxonomie für Graphikhardware Historie der Graphikhardware Architektur-Beispiele Programmierbare Hardware Taxonomie von Parallelisierungsansätzen Tiled Displays und Remote Rendering Graphik-Hardware • Abbildung der Graphik-Pipeline auf Hardwareund Software-Komponenten • Taxonomie nach Akeley (GTXRD) 3 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 – – – – 4 >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 20 Jahre Graphik-Hardware • 1980er: einfache Rasterisierung (bitBLT, Fenster, Geraden, Polygone, Text-Fonts) • 1990-95: „Geometry-Engines“ nur bei High-EndWorkstations (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, … 5 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 FramebufferFormat • 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) Leistung Graphik CPU Netzwerk Zeit 9 Exponentielles Wachstum NVIDIA GeForce FX 6800U (222M) ATI Radeon X800 XT (160M) NVIDIA GeForce FX 5800 (125M) 120 110 100 ATI Radeon 9700 Pro (110M) 90 80 70 transistors (Mio) 60 NVIDIA GeForce4 (63M) 50 40 NVIDIA GeForce3 (57M) ATI Radeon 8500 (60M) 30 20 Riva 128 (3M) 10 0 9/97 3/98 9/98 3/99 9/99 3/00 9/00 3/01 9/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 – – – – – 16 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 Low-level APIs • Ähnlichkeit mit Assembler: – – – – – – • # 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 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) • Die low-level APIs von letzten Jahr: Plattform-abhängig – OpenGL extensions: ABER: Konvergenz! GL_NV_vertex_program(1_1), 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 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 17 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 Sort-Middle Sort-Last Database Traversal Database Traversal Database Traversal Preprocessing Preprocessing Preprocessing 3D Primitives G G G G G G G G G G G G R R R R 2D Primitives R R R R R R R R Rendered Pixels Display Display Display [Molnar et al. 94] 25 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 Phase 1 Sort-First Client Phase 3 Phase 2 Servers Display 27 Client Phase 1 Sort-Last Peer-to-Peer Communication Display 28 Phase 3 Phase 2 Servers Hybrides Sort-First und Sort-Last [Samanta et al. ‘00] • 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 70 60 Speedup 50 72% 40 Hybrid 30 45% Sort-Last 20 25% 10 Sort-First 0 0 20 40 60 80 Number of servers 29 Software für Graphik-Cluster • WireGL / Chromium (Stanford) App Server App Server .. . .. . App Server Parallel OpenGL 30 Parallel OpenGL Server Display [Humphreys ‘01] 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 Server Send Depth Composite Render .. . Client Readback Send 31 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