GPU P i GPU Programmierung - Jun.

Commentaren

Transcriptie

GPU P i GPU Programmierung - Jun.
GPU Programmierung
P
i
Thorsten Grosch
Willkommen…
Willk
…zur ersten Vorlesung
g GPU Programmierung!
g
g
Heute
Organisatorisches
Vorstellung von Team und Vorlesung
Historischer Rückblick zu GPUs
GPU Programmierung
2
D Team
Das
T
Vorlesung
Jun.-Prof. Thorsten Grosch
AG Computervisualistik
Übungen
Tobias Günther
[email protected]
GPU Programmierung
3
Z V
Zur
Vorlesung
l
Programmierung der Grafik Hardware
Vorlesung ist grob in zwei Abschnitte aufgeteilt
ƒ Verbessertes Rendering (OpenGL Pipeline, Shader
Programmierung)
ƒ Allgemeine Probleme aus der Informatik (GPGPU, parallele
Programmierung)
V2 + Ü2, 5 ECTS Punkte
ƒ Vorlesung Montag,
Montag 11 - 13 Uhr
Uhr, Raum G29
G29-335
335
ƒ Übung Donnerstag, 11-13 Uhr und 13 -15 Uhr, Rechnerraum
G29-426
GPU Programmierung
4
Ei d
Einordnung
Wahlpflicht
p
Vorlesung
g für Bachelor Studenten
WPF CV;B 4-6
WPF IF;B 4-6
WPF IngINF;B 4-6
WPF WIF;B 4-6
4 6
GPU Programmierung
5
Voraussetzungen
• Grundlagen
g der Computergraphik
p
g p
• Programmierung
• C++
• OpenGL
• Aktuelle Grafikkarte benötigt
• Übungen zur Shader Programmierung
• Einfache OpenGL Programmierung bis hin zu Features aktueller
GPU Generationen
• Parallele Programmierung mit CUDA: nur NVIDIA Karten
• Rechnerraum G29-426: 10 Rechner mit NV 460 GPU
GPU Programmierung
6
W b i
Webseite
Folien,, Übungsblätter
g
und Programme
g
sind auf der Webseite
ƒ http://www.rendering.ovgu.de/lehre/lehreordner/sommersemes
ter_2012/gpu_programmierung.html
GPU Programmierung
7
Übung
Üb
• JJede Woche neues Übungsblatt
g
auf der Webseite
•
•
•
•
•
Nächste Woche erstes Blatt
Ausgabe jeweils spätestens Mittwochs
Rückgabe eine Woche später in den Übungen
Bearbeitung in 2-er Teams möglich
Übung diese Woche: Einführung
Einführung, Projektvorstellung
• Zur Bearbeitung 10 Rechner mit NV 460 Karte in Raum G29G29
426
• betreute Übung Do 11 -13 Uhr und 13 -15 Uhr
• Windows, MS Visual Studio 2008 / 2010, GLEW, CUDA, …
GPU Programmierung
8
Übung
Üb
• 50% der Übungsaufgaben
g
g
sind Zulassung
g zur Prüfung
g
• Zusatzpunkte durch eigenes Projekt möglich
• Liste möglicher Themen Æ siehe erste Übung
• Auch eigene Idee möglich Æ Absprache mit Tobias Günther
• Prüfung am Ende des Semesters
• Klausur
• Note setzt sich zusammen aus
• 50% Übu
Übung
g + Projekt,
oje t, 50% Prüfung
üu g
• Falls durch Projekt die Maximalanzahl der Übungspunkte
überschritten wird
• Übernahme
Üb
h
der
d P
Punkte
k bi
bis zu 60% Übung+Projekt
Üb
P j k , 40% P
Prüfung
üf
• Klausur muss bestanden werden
GPU Programmierung
9
P j k h
Projektthemen,
z.B.
B
……
Physik Simulationen
Tone Mapping
Order-independent
Order
independent
Transparency
• Komplette Vorstellung möglicher Themen in erster Übung
• Eigenes Thema vorher mit Tobias Günther absprechen
• Wieviele Punkte sind mit diesem Thema möglich
• Keine alten Demos/Shader „recyclen“
GPU Programmierung
10
Üb
Übungsraum
G29
G29-426
426
Account: gpupro
gp p
Passwort: $gpupro*
• Gleiches home-Verzeichnis für alle Æ Daten für alle sichtbar
• Am besten auf lokaler Platte (D) arbeiten und eigene Daten auf
Memory Stick kopieren
• Raum kann auch außerhalb der Übungszeiten genutzt werden
Æ siehe Belegungsplan
• Zugang zu Raum Æ ISG Techniker (G29, 2. Stock, Raum 235)
• Zusätzliche Stühle wieder zurückbringen
g !
• Nichts im Raum verändern (Whiteboard, Stecker, usw.)
GPU Programmierung
11
Z V
Zur
Vorlesung
l
• Hinweis: Eine Vorlesung
g zur GPU ist immer „deprecated“
„ p
• Beispiel/Übungs-Programme verwenden verschiedene Versionen
von OpenGL
• Rasante
R
E
Entwicklung
i kl
d
der GPU
• Es gibt viele verschiedene GPUs
• Keine Garantie,, dass die verwendeten Programme
g
auf beliebigen
g
GPUs lauffähig sind
• Wir testen auf Laborrechnern in G29-426
• Also:
Al
G
Geduld
d ld gefragt
f
b
beim
i anpassen an eigenen
i
R
Rechner
h
GPU Programmierung
12
Ei
Eigene
V
Vorstellung
t ll
Thorsten Grosch
W bi
Wer
bin iich
h
Thorsten Grosch
Seit September 2009 Juniorprofessor für CV in Magdeburg
Davor…
ƒ Studium Informatik TU Darmstadt
ƒ Fraunhofer IGD
• Lichtsimulation (Radiosity)
ƒ Universität Koblenz Landau (die andere CV Uni)
• Aufbau der Computergrafik Lehre
• Doktorarbeit
– Erweiterung von realen Bildern mit korrekter Beleuchtung
ƒ Post-Doc am MPI Informatik Saarbrücken
GPU Programmierung
14
IGD Darmstadt
D
t dt
ƒ
Studium Informatik TU Darmstadt
ƒ
Fraunhofer IGD Darmstadt
ƒ
Radiosity
– Finite-Elemente Verfahren für globale
Beleuchtung
– Physikalisch korrekt für diffuse Umgebungen
Refinement
GPU Programmierung
Photometrische Konsistenz
Beleuchtung Auto Innenraum
15
U i
Universität
iä K
Koblenz-Landau
bl
L d
2002 Wechsel an Uni Koblenz
zusammen mit Prof. Dr. Stefan
Müller
N
Neuaufbau
fb Computergrafik
C
t
fik
Lehrstuhl
ƒ Vorlesungen
o esu ge
• Computergrafik 1 + Übung
• Computergrafik 2 + Übung
• Photorealistische
Ph t
li ti h
Computergrafik + Übung
Forschung
g
ƒ Augmentierte Bildsynthese
GPU Programmierung
16
MPI IInformatik
f
ik
Forschungsschwerpunkt
ƒ Gl
Globale
b l B
Beleuchtung
l h
iin E
Echtzeit
h i
mit der Grafik Hardware
Coherent Shadow Maps
Screen-space Directional Occlusion
GPU Programmierung
17
B i i l IImperfect
Beispiel:
f
Sh d
Shadow
M
Maps
Imperfect Shadow Maps: Ritschel, Grosch, Kim, Seidel, Dachsbacher, Kautz
Siggraph Asia 2008
GPU Programmierung
18
Hi t i der
Historie
d GPU
GPUs
Danke an John McLaughlin
F üh Grafik-Chips
Frühe
G fik Chi
ANTIC ((Atari 8-bit)) - ca. 1979
ƒ Text und Grafiken
Geometry Engine – SGI, ca. 1982
ƒ
ƒ
ƒ
ƒ
Matrix transformationen
Clipping
Mapping auf Ausgabe
Gründung von SGI
Input-Assembler
Vertex Operation
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Pixel Shader
Output Merger
GPU Programmierung
20
F üh Grafik-Chips
Frühe
G fik Chi
Professional Graphics
p
Controller - IBM ca.1984
640*480; 256 Farben bei 60FPS
320kb ram, Intel 8088 (8Mhz)
3D Rotation and image clipping
$4290
Input-Assembler
Vertex Transform
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Pixel Shader
Output Merger
GPU Programmierung
21
F üh Grafik-Chips
Frühe
G fik Chi
SGI Iris 1400 (1984)
(
)
ƒ
ƒ
ƒ
ƒ
3D Workstation
Motorola 68010 CPU, 10Mhz, 1.5 MB Ram
1024x1024, 256 Farben
Ca. 60.000 $
Input-Assembler
Vertex Transform
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Pixel Shader
Output Merger
GPU Programmierung
22
F üh Grafik-Chips
Frühe
G fik Chi
SGI RealityEngine 1992
ƒ >1 mio. Dreiecke / sekunde
ƒ 100.000 $
Öffnen der IRIS GL von SGI
ƒ Wird bekannt als OpenGL (ca. 1992)
ƒ Erstmals cross
cross-platform
platform Grafik
Programme
Input-Assembler
Vertex Operation
Vertex Lighting
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Texturing
Alpha, Stencil,
Depth - Test
Output Merger
GPU Programmierung
23
F üh Grafik-Chips
Frühe
G fik Chi
NV1 - Nvidia 1995
ƒ Unterstützt nicht das ‘neue’
neue DirectX
Voodoo – 3dfx 1996, ca. 300$
ƒ Erster
ste reiner
e e 3
3D Beschleuniger
esc eu ge
ƒ 16-Bit, Texture Filter, Z-Buffer
ƒ 800x600, ca. 1 mio Dreiecke / Sekunde
Glide API (3dfx) unter Spieleentwicklern
beliebter
ƒ OpenGL hat Performance Probleme
(Treiber)
ƒ Bis ende 90er
Input-Assembler
Projektion
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Texturing
Alpha, Stencil,
Depth - Test
Output Merger
GPU Programmierung
Nv1 - Nvidia
Voodoo - 3dfx
24
F üh Grafik-Chips
Frühe
G fik Chi
Voodoo 2/3 - ca. 1998
ƒ
ƒ
ƒ
ƒ
ƒ
Unterstützt nur begrenzt AGP
Kein 32-Bit
Texturen Maximal 256x256
Max 16MB Ram
Anfangs keine 2D Grafik
Riva TNT2 - Nvidia März 1999
ƒ Nvidia löst 3dfx Dominanz ab
ƒ 32bit,
32bit Z
Z-Buffer,
Buffer stabile Treiber
Input-Assembler
Projektion
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Texturing
Alpha, Stencil,
Depth - Test
Output Merger
GPU Programmierung
Riva TNT2 - Nvidia
Voodoo 3 - 3dfx
25
E
Erste
GPU
Geforce 256 (NV10) - Sept. 1999
ƒ Nvidia definiert die Bez.
Bez “GPU”
GPU
ƒ Hardware Transformation und
Beleuchtung (Hardware TnL)
ƒ Vorreiter zu Vertex und Pixel Shader
units
ƒ 15Mio Polygone / Sekunde
ƒ 480Mio Pixel / Sekunde
ƒ Bis zu 128MB
8
Ram
Input-Assembler
Vertex Transform
Vertex Lighting
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Texturing
Output Merger
GPU Programmierung
Geforce 256 - Nvidia
26
P
Programmierbare
i b
H
Hardware
d
Geforce 3 (NV20) - 2001
ƒ E
Erste vertex und
d pixel
i l shader
h d
Programmierung
ƒ Erstmals können Entwickler Features
sofort einbauen
DirectX8 löst OpenGL Dominanz ab
(G i )
(Gaming)
ƒ Erstmals neuere Features als OpenGL
ƒ Erster Vertex und Pixel Shader support
ƒ DirectX ist erstmals vor OpenGL
Input-Assembler
Vertex Shader
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Pixel Shader
Output Merger
GPU Programmierung
Geforce 3 - Nvidia
27
P
Programmierbare
i b
H
Hardware
d
SGI missachtet 3D-Karten für Spieler
p
ƒ Günstige ATI und Nvidia Karten im
professionellen Bereich
ATI und
d Nvidia
N idi orientieren
i i
sich
i h nicht
i h mehr
h
an der von SGI vorgegebenen Pipeline
ƒ Programmierbare Shader
Input-Assembler
Vertex Shader
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Pixel Shader
Output Merger
GPU Programmierung
28
P
Programmierbare
i b
H
Hardware
d
ATI Radeon 9700 (R300) - 2002
ƒ Erste
E t Direct3D
Di t3D 9
9.0
0 Karte
K t
ƒ Löst Nvidia Geforce4 Dominanz ab
DirectX9 - 2002
ƒ HLSL (High-Level Shader Programming)
ƒ OpenGL bietet ab 2004 GLSL als
Alternative
ƒ Shader Model 2.0
ƒ DirectX dominiert den Spielemarkt
Input-Assembler
Vertex Shader
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Pixel Shader
Output Merger
GPU Programmierung
Radeon 9700 - ATI
29
P
Programmierbare
i b
H
Hardware
d
Nvidia Geforce 8 Serie - 2006
ƒ E
Erste Consumer
C
GPU mit
i Direct3D
Di
3D 10
support
ƒ Einführung
g von unified shaders
• Vertex und Pixel Shader vorher separat
• Thread Architektur Æ CUDA
ƒ Shader
Sh d Model
M d l 4.0
40
Input-Assembler
Vertex Shader
Hull Shader
Tessellator
Domain Shader
• Geometry Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Pixel Shader
Output Merger
Geforce 8800 GTX - Nvidia
GPU Programmierung
30
P
Programmierbare
i b
H
Hardware
d
Ati Radeon R600 - 2007
ƒ Basiert auf Xenos GPU (Xbox 360)
ƒ Unified Shader Architektur
ƒ DirectX10,
DirectX10 Shader Model 4
4.0,
0 OpenGL
3.0
Input-Assembler
Vertex Shader
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Pixel Shader
Radeon 3870X2 - ATI
GPU Programmierung
Output Merger
31
Heute
DirectX 11
ƒ Objekt
Objekt-Orientiertes
Orientiertes Programmieren im
Shader
ƒ Tesselierung
ƒ Multi-Threading
Input-Assembler
Vertex Shader
Hull Shader
GPGPU - “Compute Shader”
ƒ A
Andere
d
B
Berechnungen
h
ƒ Ausreichende Genauigkeit
ƒ Stream Output
Tessellator
Domain Shader
Geometry Shader
St
Stream
Output
O t t
Rasterizer
Pixel Shader
Output Merger
Radeon HD5870 - ATI
Geforce GTX 590 - Nvidia
aktuell: Geforce GTX 680 - Nvidia
GPU Programmierung
32
M l i GPU Systeme
Multi-GPU
S
Mehrere GPUs zusammenschalten
z.B. NVIDIA SLI, Tesla
GPU Programmierung
33
GPU Cluster
Cl
• Tianhe-1A
•
•
•
•
•
•
National Supercomputing Center, Tianjin, China
7.168 NVIDIA Tesla M2050 GPUs
14.338 Intel-Xeon-CPUs
Entspricht 50.000 Prozessoren
2 56 Petaflops
2,56
4 Megawatt
• Aktuell größter Supercomputer (mit GPUs)
• Spitzenreiter: K Computer, Kobe, Japan
• (Stand November 2011)
GPU Programmierung
34
Di V
Die
Vorlesung
l
iim Üb
Überblick
bli k
Grundlagen
G
dl
O
OpenGL
GL
OpenGL Pipeline
ƒ D
Der W
Weg vom E
Eckpunkt
k
k
zum Pixel
Transformationen
Projektionen
Einfache Beleuchtung
Texturierung
Viewport
Teilweise Wiederholung
aus Computergrafik 1,
hier aber an Pipeline
b hi b
beschrieben
GPU Programmierung
36
F
Fortgeschrittene
hi
O
OpenGL
GL Programmierung
P
i
• Blending
• Logic Operations
• Stencil
St
il Buffer
B ff
• Display Lists
• Vertex
V
B ff Objects
Buffer
Obj
(VBO
(VBOs))
• Pixel Buffer Objects (PBOs)
•…
GPU Programmierung
37
Shader
Sh
d Programmierung
P
i
1
• Vertex – und Fragment
Programs
• OpenGL Shading
Language (GLSL)
• Multi-Pass Rendering
• Multiple Render Targets
• Deep Framebuffer
GPU Programmierung
38
Sh d Programmierung
Shader
P
i
2
• Geometry Shader
• Transform Feedback
• Tessellation Shader
GPU Programmierung
39
GPU Programmiertechniken
P
i
h ik
• GPU nicht nur für Rendering
• Scattering
• Reduce
• Voxelisierung
• OpenGL – DirectX
Unterschiede
GPU Programmierung
40
P ll l P
Parallele
Programmierung
i
mit
i CUDA
Host
• Die GPU als Parallelprozessor
p
• CUDA Programmiermodell
• Grid, Block, Thread
Device
Grid 1
Kernel
1
• Grundlagen CUDA Programmierung
•
•
•
•
Funktionen und Variablen
K
Kernel
l Funktionen
F ki
„Hello World“ CUDA Programm
z B Addition zweier (großer)
z.B.
Vektoren, Skalarprodukt,
Bildfilterung, …
Block
(0, 0)
Block
(1, 0)
Block
(2, 0)
Block
(0, 1)
Block
(1, 1)
Block
(2, 1)
G id 2
Grid
Kernel
2
Block (1, 1)
Thread Thread Thread Thread Thread
(0, 0)
(1, 0)
(2, 0)
(3, 0)
(4, 0)
Thread Thread Thread Thread Thread
(0, 1)
(1, 1)
(2, 1)
(3, 1)
(4, 1)
Thread Thread Thread Thread Thread
(0, 2)
(1, 2)
(2, 2)
(3, 2)
(4, 2)
GPU Programmierung
41
P ll l P
Parallele
Programmierung
i
mit
i CUDA
• Speichertypen
p
yp
Grid
• Global, Texture, Constant,
Shared, Local, Register
Block (0, 0)
• Threads
Th d and
d Warps
W
• Thread Synchronisation
Block (1, 0)
Shared Memory
y
Registers
• Barrier
• Atomic Operations
• Page Locked Memory
• Streams
Host
Registers
Shared Memory
y
Registers
Registers
Thread (0, 0) Thread (1, 0)
Thread (0, 0) Thread (1, 0)
Local
Memory
Local
Memory
Local
Memory
Local
Memory
Global
Memory
Constant
Memory
Texture
Memory
GPU Programmierung
42
V
Verschiedene
hi d
physikalische
h ik li h Simulationen
Si l i
mit
i CUDA
• Paralleles Lösen von Differentialgleichungen
• N-Body
• Deformationen
• Wärmeausbreitung
g
• Lichtausbreitung
• Können oft parallelisiert werden
• Verbindung CUDA mit OpenGL
Quelle:
NVIDIA
GPU Programmierung
43
P ll l P
Parallele
Programmierung
i
mit
i CUDA
• Paralleles Sortieren
• Bitonic Merge Sort
• Paralleler Speicherzugriff
• Scan
GPU Programmierung
44
Z i l V
Zeitplan
Vorlesung
l
Datum
Thema
16.4.2012
Einführung, GPU History
23.4.2012
OpenGL Wiederholung, Pipeline
30.4.2012
Fortgeschrittene OpenGL Programmierung
7 5 2012
7.5.2012
Vertex
V
t / Fragment
F
t Shader,
Sh d Multi-Pass
M lti P
Rendering, Deep Framebuffer, MRT
14.5.2012
--- fällt aus ---
21.5.2012
Geometry / Tessellation Shader, Transform
Feedback
28.5.2012
--- Feiertag ---
Keine Übung
Ü
am 17.5.
4.6.2012
General Purpose GPU, DirectX – OpenGL
Vergleich
Vorstellung der Projekte am
12 7
12.7.
11.6.2012
CUDA Einführung
18.6.2012
CUDA Speicher / Synchronisation
25.6.2012
CUDA Physik Simulationen
2 7 2012
2.7.2012
CUDA Sortierung
9.7.2012
Wiederholung
Erste Übung
g am 19.4.
Einführung, Bedienung der
Rechner, Vorstellung der
Projektthemen
Ausgabe 1
1. Übungsblatt
nächste Woche auf der
Webseite
Kontrolle 1. Übungsblatt
übernächste Woche in der
Übung
GPU Programmierung
45
Literatur
Li
OpenGL Shading Language
3rd Edition
Randi Rost
Addison Wesley
OpenGL Programming Guide
7th Edition
David Shreiner
Addison Wesley
Graphics Shaders
M. Bailey, S. Cunningham
AK Peters
Real-time Rendering
3rd Edition
T. Möller, E. Haines, N. Hofmann
AK Peters
Alle Bücher sind in der Bibliothek als
Präsenz – und Ausleihexemplar
vorhanden
GPU Programmierung
GPU Gems
G
1–3
ShaderX 1 – 7
GPU Pro 1 – 3
Aktuelles zu OpenGL und GLSL: www.opengl.org
46
Literatur
Li
CUDA by Example
J. Sanders, E. Kandrot
Addison Wesley
Programming Massively Parallel Processors
D. Kirk, W. Hwu
Morgan Kaufmann
GPU C
Computing
ti Gems
G
Alle Bücher sind in der Bibliothek als
Präsenz – und Ausleihexemplar
vorhanden
GPU Programmierung
Aktuelles zu CUDA: www.nvidia.com
47
G
Genug
für
fü heute
h
Übung
g am Donnerstag
g
Nächste Vorlesung 23.4. OpenGL Wiederholung
GPU Programmierung
48