Seminar Grafikprogrammierung Thema: Hardware-Shader Christian Bauer 03.07.08
Überblick Entwicklung Die Shader im Detail Programmierung GPGPU Zusammenfassung & Ausblick
1/19 Entwicklung (1) Früher: Berechnung auf der CPU
1/19 Entwicklung (1) Früher: Berechnung auf der CPU Probleme: CPU überlastet
1/19 Entwicklung (1) Früher: Berechnung auf der CPU Eigenständige GPU Probleme: CPU überlastet
1/19 Entwicklung (1) Früher: Berechnung auf der CPU Eigenständige GPU Hardware T&L Probleme: CPU überlastet
1/19 Entwicklung (1) Früher: Berechnung auf der CPU Eigenständige GPU Hardware T&L Probleme: CPU überlastet Fehlende Flexibilität Möglichkeiten abhängig von der vorliegenden Hardware
2/19 Entwicklung (1) Heute: Hardwareshader parallele Rechenwerke programmierbar spezialisiert auf Grafikanwendungen
2/19 Entwicklung (1) Heute: Hardwareshader parallele Rechenwerke programmierbar spezialisiert auf Grafikanwendungen Grafikpipeline im Shader Model 1-3:
3/19 Entwicklung (2) Shader Model 4 (DirectX 10)
3/19 Entwicklung (2) Shader Model 4 (DirectX 10) Ziele: Weitere Reduktion der CPU-Last Mehr Flexibilität bei Vertex- Manipulation
Überblick Entwicklung Die Shader im Detail Programmierung GPGPU Zusammenfassung & Ausblick
4/19 Vertexshader (1) Input: ein Vertex Output: genau ein Vertex
4/19 Vertexshader (1) Input: ein Vertex Output: genau ein Vertex Anwendungen: Animation Displacement Mapping Kamera-Effekte
5/19 Geometryshader (1) Input: primitiver Körper Output: mehrere primitive Körper
5/19 Geometryshader (1) Input: primitiver Körper Output: mehrere primitive Körper Anwendungen: Geometry Instancing Fell / Haare Partikelsysteme
6/19 Pixelshader (1) Input: ein Pixel Output: ein Pixel
6/19 Pixelshader (1) Input: ein Pixel Output: ein Pixel Anwendungen: (Multi-)Texturing Spiegelungen Pixelgenaue Beleuchtung und Schattenwurf
7/19 Unified Shader Architecture Problem: ungleichmäßige Auslastung
7/19 Unified Shader Architecture Problem: ungleichmäßige Auslastung Lösung: Generische Architektur statt unterschiedlicher Shader-Einheiten
Überblick Entwicklung Die Shader im Detail Programmierung GPGPU Zusammenfassung & Ausblick
8/19 Programmierung von Shadern: Entwicklung Programmiersprache: Früher: Assembler Heute: Hochsprachen (HLSL,...) IDEs: RenderMonkey NVidia FX Composer...
9/19 Programmierung von Shadern: Beispiel Multitexturing Einfache Beleuchtung Graue Fläche Texturierter Würfel
10/19 Programmierung von Shadern: Vertexshader Referenzierung der Weltmatrix: float4x4 wvp : WorldViewProjection
10/19 Programmierung von Shadern: Vertexshader Referenzierung der Weltmatrix: float4x4 wvp : WorldViewProjection Variablentyp
10/19 Programmierung von Shadern: Vertexshader Referenzierung der Weltmatrix: float4x4 wvp : WorldViewProjection Semantic
11/19 Programmierung von Shadern: Vertexshader Definition eines eigenen Datentyps: struct VS_Object { float4 Position : POSITION0; float2 TexCoord : TEXCOORD0; };
11/19 Programmierung von Shadern: Vertexshader Definition eines eigenen Datentyps: struct VS_Object { float4 Position : POSITION0; float2 TexCoord : TEXCOORD0; }; Typ-Definition
12/19 Programmierung von Shadern: Vertexshader Das Vertexshaderprogramm: VS_Object VS_Main( VS_Object In ) { VS_Object Out; Out.Position = mul(in.position, wvp); Out.TexCoord = In.TexCoord; return Out; }
12/19 Programmierung von Shadern: Vertexshader Das Vertexshaderprogramm: VS_Object VS_Main( VS_Object In ) { VS_Object Out; Out.Position = mul(in.position, wvp); Out.TexCoord = In.TexCoord; return Out; } Intrinsic
13/19 Programmierung von Shadern: Pixelshader Texturzugriff: sampler2d Texture1; sampler2d Texture2;
13/19 Programmierung von Shadern: Pixelshader Texturzugriff: sampler2d Texture1; sampler2d Texture2; Textursampler
14/19 Programmierung von Shadern: Pixelshader Das Pixelshaderprogramm: float4 PS_Main (float2 TexCoord : TEXCOORD0) : COLOR0 { float4 Out = (float4) 0; Out += tex2d(texture1, TexCoord); Out += tex2d(texture2, TexCoord); return Out; }
14/19 Programmierung von Shadern: Pixelshader Das Pixelshaderprogramm: float4 PS_Main (float2 TexCoord : TEXCOORD0) : COLOR0 { float4 Out = (float4) 0; Out += tex2d(texture1, TexCoord); Out += tex2d(texture2, TexCoord); return Out; } Farbwert aus Textur
Überblick Entwicklung Die Shader im Detail Programmierung GPGPU Zusammenfassung & Ausblick
15/19 GPGPU: Leistungsvergleich GPU - CPU Intel QX9770: 4 Kerne 45 GFlops 26 GByte Speicherbandbreite NVidia GeForce 280 GTX:
15/19 GPGPU: Leistungsvergleich GPU - CPU Intel QX9770: 4 Kerne 45 GFlops 26 GByte Speicherbandbreite NVidia GeForce 280 GTX: 240 Shader
15/19 GPGPU: Leistungsvergleich GPU - CPU Intel QX9770: 4 Kerne 45 GFlops 26 GByte Speicherbandbreite NVidia GeForce 280 GTX: 240 Shader 933 GFlops
15/19 GPGPU: Leistungsvergleich GPU - CPU Intel QX9770: 4 Kerne 45 GFlops 26 GByte Speicherbandbreite NVidia GeForce 280 GTX: 240 Shader 933 GFlops 141 GByte Speicherbandbreite
16/19 GPGPU: Performancevergleich Beispiel: Folding @ Home
17/19 GPGPU: Pro & Contra Vorteile der GPU: Rechenleistung Speicherdurchsatz
17/19 GPGPU: Pro & Contra Vorteile der GPU: Rechenleistung Speicherdurchsatz Nachteile: FP-Genauigkeit Angepasster Code notwendig
17/19 GPGPU: Pro & Contra Vorteile der GPU: Rechenleistung Speicherdurchsatz Nachteile: FP-Genauigkeit Angepasster Code notwendig Entwicklungstools: AMD/ATI CAL NVidia CUDA
Überblick Entwicklung Die Shader im Detail Programmierung GPGPU Zusammenfassung & Ausblick
18/19 Zusammenfassung Hardwareshader: Leistungszuwachs durch Parallelisierung und Spezialisierung Gewinn an Flexibilität HLSL: Zugänglichkeit
19/19 Ausblick Weiter zunehmende Parallelisierung Stellenwert von GPGPU steigt
Ende Ende Noch Fragen?