Upload
vandiep
View
214
Download
0
Embed Size (px)
Citation preview
GPU P iGPU ProgrammierungThorsten Grosch
WillkWillkommen…
…zur ersten Vorlesung GPU Programmierung!g g g
HeuteOrganisatorischesVorstellung von Team und VorlesungHistorischer Rückblick zu GPUs
2GPU Programmierung
D TDas Team
VorlesungVorlesungJun.-Prof. Thorsten GroschAG Computervisualistik
ÜbungenTobias Gü[email protected]
3GPU Programmierung
Z V lZur Vorlesung
Programmierung der Grafik HardwareProgrammierung der Grafik Hardware
Vorlesung ist grob in zwei Abschnitte aufgeteiltVorlesung ist grob in zwei Abschnitte aufgeteiltVerbessertes Rendering (OpenGL Pipeline, ShaderProgrammierung)Allgemeine Probleme aus der Informatik (GPGPU, parallele Programmierung)
V2 + Ü2, 5 ECTS PunkteVorlesung Montag 11 - 13 Uhr Raum G29-335Vorlesung Montag, 11 13 Uhr, Raum G29 335Übung Donnerstag, 13-15 Uhr und 15 -17 Uhr, Rechnerraum G29-426
4GPU Programmierung
Ei dEinordnung
Wahlpflicht Vorlesung für Bachelor Studenten p g
WPF CV;B 4-6WPF IF;B 4-6WPF IngINF;B 4-6WPF WIF;B 4-6WPF WIF;B 4 6
5GPU Programmierung
VVoraussetzungen
• Grundlagen der Computergraphikg p g p
• Programmierung• C++ • OpenGL
• Aktuelle Grafikkarte benötigtÜbungen zur Shader Programmierung• Ü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
6GPU Programmierung
W b iWebseite
Folien, Übungsblätter und Programme sind auf der Webseite , g ghttp://www.rendering.ovgu.de/lehre/lehreordner/sommersemester_2011/gpu_programmierung.html
7GPU Programmierung
ÜbÜbung
• Jede Woche neues Übungsblatt auf der WebseiteJ g• 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
• Zur Bearbeitung 10 Rechner mit NV 460 Karte in Raum G29-426426
• betreute Übung Do 13 -15 Uhr und 15 -17 Uhr• Windows, MS Visual Studio 2008, GLEW, CUDA, …
8GPU Programmierung
ÜbÜbung
• 50% der Übungsaufgaben sind Zulassung zur Prüfung g g g 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• Bei hoher Teilnehmerzahl schriftlich sonst mündlich• Bei hoher Teilnehmerzahl schriftlich, sonst mündlich
• Note setzt sich zusammen aus• 50% Übung + Projekt, 50% Prüfung• Falls durch Projekt die Maximalanzahl der Übungspunkte
üb h i i d
9GPU Programmierung
überschritten wird• Übernahme der Punkte bis zu 60% Übung+Projekt , 40% Prüfung
P j k h BProjektthemen, z.B.
……N-Body Simulations
Order independent
• Komplette Vorstellung möglicher Themen in erster Übung
Tone Mapping
Order-independentTransparency
• Komplette Vorstellung möglicher Themen in erster Übung• Eigenes Thema vorher mit Tobias Günther absprechen
• Wieviele Punkte sind mit diesem Thema möglichWieviele Punkte sind mit diesem Thema möglich• Keine alten Demos/Shader „recyclen“
10GPU Programmierung
Üb G29 426Übungsraum G29-426
• 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 Belegungsplansiehe Belegungsplan
• Zusätzliche Stühle wieder zurückbringen !Zusätzliche Stühle wieder zurückbringen !
11GPU Programmierung
Z V lZur Vorlesung
• Hinweis: Eine Vorlesung zur GPU ist immer „deprecated“g „ p• Beispiel/Übungs-Programme verwenden verschiedene Versionen
von OpenGLR E i kl d GPU• Rasante Entwicklung der GPU
• Erster Durchlauf der Vorlesung
• Es gibt viele verschiedene GPUs• Keine Garantie, dass die verwendeten Programme auf beliebigen , g g
GPUs lauffähig sind• Wir testen auf Laborrechnern in G29-426
Al G d ld f b i i R h• Also: Geduld gefragt beim anpassen an eigenen Rechner
• Bitte keine Laptops während der Vorlesung verwenden
12GPU Programmierung
• Bitte keine Laptops während der Vorlesung verwenden
Ei V t llEigene VorstellungThorsten Grosch
W bi i hWer bin ich
Thorsten GroschThorsten GroschSeit September 2009 Juniorprofessor für CV in MagdeburgDavor…Davor…
Studium Informatik TU DarmstadtFraunhofer IGD
• Lichtsimulation (Radiosity)Universität Koblenz Landau (die andere CV Uni)
Aufbau der Computergrafik Lehre• Aufbau der Computergrafik Lehre• Doktorarbeit
– Erweiterung von realen Bildern mit korrekter BeleuchtungPost-Doc am MPI Informatik Saarbrücken
14GPU Programmierung
IGD D t dtIGD Darmstadt
Studium Informatik TU DarmstadtFraunhofer IGD DarmstadtRadiosityRadiosity
– Finite-Elemente Verfahren für globale BeleuchtungPhysikalisch korrekt für diffuse Umgebungen– Physikalisch korrekt für diffuse Umgebungen
Refinement Photometrische Konsistenz Beleuchtung Auto Innenraum
15GPU Programmierung
Refinement Photometrische Konsistenz Beleuchtung Auto Innenraum
U i i ä K bl L dUniversität Koblenz-Landau
2002 Wechsel an Uni Koblenz zusammen mit Prof. Dr. Stefan Müller
N fb C t fikNeuaufbau Computergrafik Lehrstuhl
Vorlesungeno esu ge• Computergrafik 1 + Übung• Computergrafik 2 + Übung
Ph t li ti h• PhotorealistischeComputergrafik + Übung
ForschunggAugmentierte Bildsynthese
16GPU Programmierung
MPI I f ikMPI InformatikForschungsschwerpunkt
Gl b l B l h i E h iGlobale Beleuchtung in Echtzeit mit der Grafik Hardware
Coherent Shadow MapsCoherent Shadow Maps
17GPU Programmierung
Screen-space Directional Occlusion
B i i l I f Sh d MBeispiel: Imperfect Shadow Maps
Imperfect Shadow Maps: Ritschel, Grosch, Kim, Seidel, Dachsbacher, Kautz
18GPU Programmierung
Imperfect Shadow Maps: Ritschel, Grosch, Kim, Seidel, Dachsbacher, KautzSiggraph Asia 2008
Hi t i d GPUHistorie der GPUsDanke an John McLaughlinDanke an John McLaughlin
F üh G fik ChiFrühe Grafik-Chips
ANTIC (Atari 8-bit) - ca. 1979( )Text und Grafiken
Geometry Engine – SGI, ca. 1982
Input-Assembler
Vertex Operation
Matrix transformationenClippingMapping auf Ausgabe
Hull Shader
Tessellator
Mapping auf AusgabeGründung von SGI
Domain Shader
Geometry Shader
St O t tStream Output
Rasterizer
Pixel Shader
Output Merger
20GPU Programmierung
F üh G fik ChiFrühe Grafik-Chips
Professional Graphics Controller - IBM ca.1984p640*480; 256 Farben bei 60FPS 320kb ram, Intel 8088 (8Mhz)
Input-AssemblerVertex Transform
3D Rotation and image clipping$4290
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St O t tStream Output
Rasterizer
Pixel Shader
Output Merger
21GPU Programmierung
F üh G fik ChiFrühe Grafik-Chips
SGI Iris 1400 (1984)( )3D WorkstationMotorola 68010 CPU, 10Mhz, 1.5 MB Ram
Input-AssemblerVertex Transform
1024x1024, 256 FarbenCa. 60.000 $
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St O t tStream Output
Rasterizer
Pixel Shader
Output Merger
22GPU Programmierung
F üh G fik ChiFrühe Grafik-ChipsSGI RealityEngine 1992
>1 mio. Dreiecke / sekunde100.000 $
Öffnen der IRIS GL von SGI
Input-Assembler
Vertex Operation
Öffnen der IRIS GL von SGIWird bekannt als OpenGL (ca. 1992)Erstmals cross-platform Grafik
Vertex Lighting
TessellatorErstmals cross platform GrafikProgramme Domain Shader
Geometry Shader
St O t tStream Output
Rasterizer
Texturing
Alpha, Stencil, Depth - Test
23GPU Programmierung
Output Merger
Depth Test
F üh G fik ChiFrühe Grafik-ChipsNV1 - Nvidia 1995
Unterstützt nicht das ‘neue’ DirectXUnterstützt nicht das neue DirectXVoodoo – 3dfx 1996, ca. 300$
Erster reiner 3D Beschleuniger
Input-Assembler
Projektionste e e 3 esc eu ge
16-Bit, Texture Filter, Z-Buffer800x600, ca. 1 mio Dreiecke / Sekunde
Hull Shader
Tessellator
Glide API (3dfx) unter Spieleentwicklernbeliebter
OpenGL hat Performance Probleme
Domain Shader
Geometry Shader
St O t tOpenGL hat Performance Probleme(Treiber)Bis ende 90er
Stream Output
Rasterizer
Texturing
Alpha, Stencil, Depth - Test
24GPU Programmierung
Output Merger
Depth Test
Nv1 - Nvidia Voodoo - 3dfx
F üh G fik ChiFrühe Grafik-ChipsVoodoo 2/3 - ca. 1998
Unterstützt nur begrenzt AGPUnterstützt nur begrenzt AGPKein 32-BitTexturen Maximal 256x256
Input-Assembler
Projektion
Max 16MB RamAnfangs keine 2D Grafik
Hull Shader
Tessellator
Riva TNT2 - Nvidia März 1999Nvidia löst 3dfx Dominanz ab32bit Z Buffer stabile Treiber
Domain Shader
Geometry Shader
St O t t32bit, Z-Buffer, stabile Treiber Stream Output
Rasterizer
Texturing
Alpha, Stencil, Depth - Test
25GPU Programmierung
Output Merger
Depth Test
Riva TNT2 - Nvidia Voodoo 3 - 3dfx
E GPUErste GPUGeforce 256 (NV10) - Sept. 1999
Nvidia definiert die Bez “GPU”Nvidia definiert die Bez. GPUHardware Transformation und Beleuchtung (Hardware TnL)
Input-Assembler
Vertex Transform
Vorreiter zu Vertex und Pixel Shaderunits15Mio Polygone / Sekunde
Vertex Lighting
Tessellator
15Mio Polygone / Sekunde480Mio Pixel / SekundeBis zu 128MB Ram
Domain Shader
Geometry Shader
St O t t8 Stream Output
Rasterizer
Texturing
Output Merger
26GPU Programmierung Geforce 256 - Nvidia
P i b H dProgrammierbare HardwareGeforce 3 (NV20) - 2001
E d i l h dErste vertex und pixel shaderProgrammierungErstmals können Entwickler Features
Input-Assembler
Vertex Shader
sofort einbauenDirectX8 löst OpenGL Dominanz ab
(G i )
Hull Shader
Tessellator
(Gaming)Erstmals neuere Features als OpenGLErster Vertex und Pixel Shader support
Domain Shader
Geometry Shader
St O t tErster Vertex und Pixel Shader supportDirectX ist erstmals vor OpenGL
Stream Output
Rasterizer
Pixel Shader
Output Merger
27GPU Programmierung Geforce 3 - Nvidia
P i b H dProgrammierbare Hardware
SGI missachtet 3D-Karten für SpielerpGünstige ATI und Nvidia Karten improfessionellen Bereich
ATI d N idi i i i h i h h
Input-Assembler
Vertex Shader
ATI und Nvidia orientieren sich nicht mehran der von SGI vorgegebenen Pipeline
Programmierbare Shader
Hull Shader
TessellatorProgrammierbare Shader Domain Shader
Geometry Shader
St O t tStream Output
Rasterizer
Pixel Shader
Output Merger
28GPU Programmierung
P i b H dProgrammierbare HardwareATI Radeon 9700 (R300) - 2002
E t Di t3D 9 0 K tErste Direct3D 9.0 KarteLöst Nvidia Geforce4 Dominanz ab
DirectX9 - 2002
Input-Assembler
Vertex ShaderDirectX9 2002
HLSL (High-Level Shader Programming)OpenGL bietet ab 2004 GLSL als
Hull Shader
Tessellator
AlternativeShader Model 2.0DirectX dominiert den Spielemarkt
Domain Shader
Geometry Shader
St O t tDirectX dominiert den Spielemarkt Stream Output
Rasterizer
Pixel Shader
Output Merger
29GPU ProgrammierungRadeon 9700 - ATI
P i b H dProgrammierbare HardwareNvidia Geforce 8 Serie - 2006
E C GPU i Di 3D 10Erste Consumer GPU mit Direct3D 10 supportEinführung von unified shaders
Input-Assembler
Vertex Shaderg
• Vertex und Pixel Shader vorher separat• Thread Architektur CUDA
Sh d M d l 4 0
Hull Shader
Tessellator
Shader Model 4.0• Geometry Shader
Domain Shader
Geometry Shader
St O t tStream Output
Rasterizer
Pixel Shader
Output Merger
30GPU Programmierung
Geforce 8800 GTX - Nvidia
P i b H dProgrammierbare HardwareAti Radeon R600 - 2007
Basiert auf Xenos GPU (Xbox 360)Unified Shader ArchitekturDirectX10 Shader Model 4 0 OpenGL
Input-Assembler
Vertex ShaderDirectX10, Shader Model 4.0, OpenGL 3.0
Hull Shader
Tessellator
Domain Shader
Geometry Shader
St O t tStream Output
Rasterizer
Pixel Shader
Output MergerRadeon 3870X2 - ATI
31GPU Programmierung
HHeuteDirectX 11
Objekt Orientiertes Programmieren imObjekt-Orientiertes Programmieren imShaderTesselierung
Input-Assembler
Vertex Shader
Multi-ThreadingGPGPU - “Compute Shader”
A d B h
Hull Shader
Tessellator
Andere BerechnungenAusreichende GenauigkeitStream Output
Domain Shader
Geometry Shader
St O t tStream Output Stream Output
Rasterizer
Pixel Shader
Output Merger
32GPU Programmierung
Geforce GTX 590 - NvidiaRadeon HD5870 - ATI
M l i GPU SMulti-GPU Systeme
Mehrere GPUs zusammenschalten z.B. NVIDIA SLI, Tesla
33GPU Programmierung
GPU ClGPU Cluster
• 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 Petaflops• 4 Megawatt
• Aktuell größter Supercomputer• (Stand November 2010)
34GPU Programmierung
Di V l i Üb bli kDie Vorlesung im Überblick
G dl O GLGrundlagen OpenGLOpenGL Pipeline
D W E k kDer Weg vom Eckpunkt zum Pixel
TransformationenTransformationenProjektionenEinfache BeleuchtungEinfache BeleuchtungTexturierungViewportViewport
Teilweise WiederholungTeilweise Wiederholung aus Computergrafik 1, hier aber an Pipeline b h i b
36GPU Programmierung
beschrieben
F h i O GL P iFortgeschrittene OpenGL Programmierung
Blending• Blending• Logic OperationsSt il B ff• Stencil Buffer
• Display ListsV B ff Obj (VBO )• Vertex Buffer Objects (VBOs)
• Pixel Buffer Objects (PBOs)• …
37GPU Programmierung
Sh d P i 1Shader Programmierung 1• Vertex – und Fragment ProgramsPrograms
• OpenGL ShadingLanguage (GLSL)Language (GLSL)
• Multi-Pass Rendering• Multiple Render Targets• Multiple Render Targets• Deep Framebuffer
38GPU Programmierung
Sh d P i 2Shader Programmierung 2
• Geometry Shader
• Transform Feedback
• Tessellation Shader
39GPU Programmierung
GPU P i h ikGPU Programmiertechniken
• GPU nicht nur für Rendering• Scattering• Reduce• Voxelisierung
• OpenGL – DirectX UnterschiedeUnterschiede
40GPU Programmierung
P ll l P i i CUDAParallele Programmierung mit CUDA
• Die GPU als ParallelprozessorHost Device
Grid 1p• CUDA Programmiermodell
• Grid, Block, ThreadKernel
1
Grid 1
Block(0, 0)
Block(1, 0)
Block(2, 0)
• Grundlagen CUDA Programmierung• Funktionen und Variablen
K l F k i
Block(0, 1)
Block(1, 1)
Block(2, 1)
G id 2• Kernel Funktionen• „Hello World“ CUDA Programm• z B Addition zweier (großer)
Kernel 2
Grid 2
z.B. Addition zweier (großer) Vektoren, Skalarprodukt, Bildfilterung, …
Block (1, 1)
Thread Thread Thread Thread Thread
Thread(0, 1)
Thread(1, 1)
Thread(2, 1)
Thread(3, 1)
Thread(4, 1)
(0, 0) (1, 0) (2, 0) (3, 0) (4, 0)
41GPU Programmierung
Thread(0, 2)
Thread(1, 2)
Thread(2, 2)
Thread(3, 2)
Thread(4, 2)
P ll l P i i CUDAParallele Programmierung mit CUDA
• Speichertypen Gridp yp• Global, Texture, Constant,
Shared, Local, RegisterTh d d W
Block (0, 0)
Shared Memory
Block (1, 0)
Shared Memory• Threads and Warps• Thread Synchronisation
• Barrier
y
Registers Registers
y
Registers Registers
• Barrier• Atomic Operations• Page Locked Memory Local
Thread (0, 0)
Local
Thread (1, 0)
Local
Thread (0, 0)
Local
Thread (1, 0)
Page Locked Memory• Streams
GlobalMemory
LocalMemory
LocalMemory
LocalMemory
LocalMemory
Host
ConstantMemory
Texture
42GPU Programmierung
TextureMemory
P ll l P i i CUDAParallele Programmierung mit CUDA
General Purpose GPU mit CUDA, z.B.p ,
• Paralleles Sortieren auf der GPU• Partikelsysteme• Paralleles Lösen von Differentialgleichungen• …
43GPU Programmierung
Z i l V l
Datum Thema4.4.2011 Einführung, GPU History
Zeitplan Vorlesung 11.4.2011 OpenGL Wiederholung, Pipeline
18.4.2011 Fortgeschrittene OpenGL ProgrammierungErste Übung am 7.4.25.4.2011 -- Feiertag --
2.5.2011 Vertex / Fragment Shader, Multi-Pass Rendering, Deep Framebuffer, MRT
gEinführung, Bedienung der Rechner, Vorstellung der Projektthemen
Ausgabe 1 Übungsblatt9.5.2011 Geometry / Tessellation Shader, Transform
Feedback
16.5.2011 General Purpose GPU, DirectX – OpenGLV l i h
Ausgabe 1. Übungsblattnächste Woche auf der Webseite
Kontrolle 1. Übungsblatt Vergleich
23.5.2011 CUDA Einführung
30.5.2011 CUDA Speicher / Synchronisation
Kontrolle 1. Übungsblattübernächste Woche in der Übung
Ü6.6.2011 CUDA Teil 3
13.6.2011 -- Feiertag --
Keine Übung am 2.6.
Vorstellung der Projekte am 7 7 20.6.2011 CUDA Teil 4
27.6.2011 -- fällt voraussichtlich aus –
7.7.
44GPU Programmierung
4.7.2011 Wiederholung
LiLiteratur
OpenGL Shading Language3rd EditionRandi Rost
Addison Wesley
OpenGL Programming Guide7th Edition
David Shreiner Graphics ShadersAddison Wesley
Real-time Rendering3rd Edition
M. Bailey, S. CunninghamAK Peters
GPU G 1 33rd EditionT. Möller, E. Haines, N. Hofmann
AK PetersAlle Bücher sind in der Bibliothek als Präsenz – und Ausleihexemplar
GPU Gems 1 – 3ShaderX 1 – 7GPU Pro
45GPU Programmierung
Aktuelles zu OpenGL und GLSL: www.opengl.orgPräsenz – und Ausleihexemplar vorhanden
LiLiteratur
Programming Massively Parallel ProcessorsCUDA by ExampleJ. Sanders, E. Kandrot
Addison Wesley
Programming Massively Parallel ProcessorsD. Kirk, W. Hwu
Morgan Kaufmann
Aktuelles zu CUDA: www.nvidia.comAlle Bücher sind in der Bibliothek als Präsenz – und Ausleihexemplar
46GPU Programmierung
Präsenz – und Ausleihexemplar vorhanden
G fü hGenug für heute
Übung am Donnerstagg gAufteilung in zwei Gruppen
Nächste Vorlesung 11.4. OpenGL Wiederholung
47GPU Programmierung