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

Documentos relacionados