Thorsten Grosch
Willkommen zur ersten Vorlesung! g Heute Organisatorisches Vorstellung von Team und Vorlesung Historischer Rückblick zu GPUs 2
Das Team Vorlesung Jun.-Prof. Thorsten Grosch AG Computervisualistik Übungen Tobias Günther tobias.guenther@st.ovgu.de 3
Zur Vorlesung 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, 11-13 Uhr, Raum G29-335 Übung Donnerstag, 11-13 Uhr und 13-15 Uhr, Rechnerraum G29-426 4
Einordnung Wahlpflicht Vorlesung für Bachelor Studenten WPF CV;B 4-6 WPF IF;B 4-6 WPF IngINF;B 4-6 WPF WIF;B 4-6 5
Voraussetzungen Grundlagen der Computergraphik 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 6
Wb Webseite Folien, Übungsblätter und Programme sind auf der Webseite http://www.rendering.ovgu.de/lehre/lehreordner/sommersemes ter_2012/gpu_programmierung.html 7
Übung Jede Woche neues Übungsblatt 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, Projektvorstellung Zur Bearbeitung 10 Rechner mit NV 460 Karte in Raum G29-426 betreute Übung Do 11-13 Uhr und 13-15 Uhr Windows, MS Visual Studio 2008 / 2010, GLEW, CUDA, 8
Übung 50% der Übungsaufgaben g sind Zulassung zur Prüfung 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% Übung + Projekt, 50% Prüfung Falls durch Projekt die Maximalanzahl der Übungspunkte überschritten wird Übernahme der Punkte bis zu 60% Übung+Projekt, 40% Prüfung Klausur muss bestanden werden 9
Projektthemen, z.b. Physik Simulationen Tone Mapping 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 10
Übungsraum G29-426 Account: gpupro 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! Nichts im Raum verändern (Whiteboard, Stecker, usw.) 11
Zur Vorlesung Hinweis: Eine Vorlesung zur GPU ist immer deprecated Beispiel/Übungs-Programme verwenden verschiedene Versionen von OpenGL Rasante Entwicklung der GPU Es gibt viele verschiedene GPUs Keine Garantie, dass die verwendeten Programme auf beliebigen GPUs lauffähig sind Wir testen auf Laborrechnern in G29-426 Also: Geduld gefragt beim anpassen an eigenen Rechner 12
Eigene Vorstellung Thorsten Grosch
Wer bin ich 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 14
IGD Darmstadt Studium Informatik TU Darmstadt Fraunhofer IGD Darmstadt Radiosity Finite-Elemente Verfahren für globale Beleuchtung Physikalisch korrekt für diffuse Umgebungen Refinement Photometrische Konsistenz Beleuchtung Auto Innenraum 15
Universität i Koblenz-Landau 2002 Wechsel an Uni Koblenz zusammen mit Prof. Dr. Stefan Müller Neuaufbau Computergrafik Lehrstuhl Vorlesungen Computergrafik 1 + Übung Computergrafik 2 + Übung Photorealistische ti h Computergrafik + Übung Forschung Augmentierte Bildsynthese 16
MPI Informatik Forschungsschwerpunkt Globale l Beleuchtung in Echtzeit mit der Grafik Hardware Coherent Shadow Maps Screen-space Directional Occlusion 17
Bi Beispiel: ilimperfect Shadow Maps Imperfect Shadow Maps: Ritschel, Grosch, Kim, Seidel, Dachsbacher, Kautz Siggraph Asia 2008 18
Historie i der GPUs Danke an John McLaughlin
Füh Frühe Grafik-Chips 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 Stream Output t Rasterizer Pixel Shader Output Merger 20
Füh Frühe Grafik-Chips Professional Graphics 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 Stream Output t Rasterizer Pixel Shader Output Merger 21
Füh Frühe Grafik-Chips 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 Stream Output t Rasterizer Pixel Shader Output Merger 22
Füh Frühe Grafik-Chips SGI RealityEngine 1992 >1 mio. Dreiecke / sekunde 100.000 $ Öffnen der IRIS GL von SGI Wird bekannt als OpenGL (ca. 1992) Erstmals cross-platform Grafik Programme Input-Assembler Vertex Operation Vertex Lighting Tessellator Domain Shader Geometry Shader Stream Output t Rasterizer Texturing Alpha, Stencil, Depth - Test Output Merger 23
Füh Frühe Grafik-Chips NV1 - Nvidia 1995 Unterstützt nicht das neue DirectX Voodoo 3dfx 1996, ca. 300$ Erster reiner e 3D Beschleuniger eu 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 Nv1 - Nvidia Voodoo - 3dfx Input-Assembler Projektion Hull Shader Tessellator Domain Shader Geometry Shader Stream Output t Rasterizer Texturing Alpha, Stencil, Depth - Test Output Merger 24
Füh Frühe Grafik-Chips 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, Z-Buffer, stabile Treiber Input-Assembler Projektion Hull Shader Tessellator Domain Shader Geometry Shader Stream Output t Rasterizer Texturing Alpha, Stencil, Depth - Test Output Merger Riva TNT2 - Nvidia Voodoo 3-3dfx 25
Erste GPU Geforce 256 (NV10) - Sept. 1999 Nvidia definiert die Bez. GPU Hardware Transformation und Beleuchtung (Hardware TnL) Vorreiter zu Vertex und Pixel Shader units 15Mio Polygone / Sekunde 480Mio Pixel / Sekunde Bis zu 128MB Ram Input-Assembler Vertex Transform Vertex Lighting Tessellator Domain Shader Geometry Shader Stream Output t Rasterizer Texturing Output Merger Geforce 256 - Nvidia 26
Programmierbare Hardware Geforce 3 (NV20) - 2001 Erste vertex und pixel shader hd Programmierung Erstmals können Entwickler Features sofort einbauen DirectX8 löst OpenGL Dominanz ab (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 Stream Output t Rasterizer Pixel Shader Output Merger Geforce 3 - Nvidia 27
Programmierbare Hardware SGI missachtet 3D-Karten für Spieler Günstige ATI und Nvidia Karten im professionellen Bereich ATI und Nidi Nvidia orientieren i sich ihnicht mehr an der von SGI vorgegebenen Pipeline Programmierbare Shader Input-Assembler Vertex Shader Hull Shader Tessellator Domain Shader Geometry Shader Rasterizer Stream Output t Pixel Shader Output Merger 28
Programmierbare Hardware ATI Radeon 9700 (R300) - 2002 Erste Direct3D 9.0 Karte 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 Stream Output t Rasterizer Pixel Shader Output Merger Radeon 9700 - ATI 29
Programmierbare Hardware Nvidia Geforce 8 Serie - 2006 Erste Consumer GPU mit Direct3D 10 support Einführung von unified shaders Vertex und Pixel Shader vorher separat Thread Architektur CUDA Shader Model l40 4.0 Geometry Shader Input-Assembler Vertex Shader Hull Shader Tessellator Domain Shader Geometry Shader Stream Output t Rasterizer Pixel Shader Output Merger Geforce 8800 GTX - Nvidia 30
Programmierbare Hardware Ati Radeon R600-2007 Basiert auf Xenos GPU (Xbox 360) Unified Shader Architektur DirectX10, Shader Model 4.0, OpenGL 3.0 Input-Assembler Vertex Shader Hull Shader Tessellator Domain Shader Geometry Shader Rasterizer Stream Output t Radeon 3870X2 - ATI Pixel Shader Output Merger 31
Heute DirectX 11 Objekt-OrientiertesOrientiertes Programmieren im Shader Tesselierung Multi-Threading GPGPU - Compute Shader Andere Berechnungen Ausreichende Genauigkeit Stream Output Input-Assembler Vertex Shader Hull Shader Tessellator Domain Shader Geometry Shader Stream Output t Rasterizer Pixel Shader Output Merger Radeon HD5870 - ATI Geforce GTX 590 - Nvidia aktuell: Geforce GTX 680 - Nvidia 32
Multi-GPU Systeme Mehrere GPUs zusammenschalten z.b. NVIDIA SLI, Tesla 33
GPU Cluster Tianhe-1A National Supercomputing Center, Tianjin, China 7.168 NVIDIA Tesla M2050 GPUs 14.338 Intel-Xeon-CPUs Entspricht 50.000 Prozessoren 256Petaflops 2,56 4 Megawatt Aktuell größter Supercomputer (mit GPUs) Spitzenreiter: K Computer, Kobe, Japan (Stand November 2011) 34
Die Vorlesung im Überblickbli
Grundlagen OpenGL OpenGL Pipeline Der Weg vom Eckpunkt k zum Pixel Transformationen Projektionen Einfache Beleuchtung Texturierung Viewport Teilweise Wiederholung aus Computergrafik 1, hier aber an Pipeline beschrieben b 36
Fortgeschrittene OpenGLProgrammierung Blending Logic Operations Stencil Buffer Display Lists Vertex Buffer Objects (VBOs) Pixel Buffer Objects (PBOs) 37
Shader Programmierung 1 Vertex und Fragment Programs OpenGL Shading Language (GLSL) Multi-Pass Rendering Multiple Render Targets Deep Framebuffer 38
Shader Programmierung 2 Geometry Shader Transform Feedback Tessellation Shader 39
GPU Programmiertechniken ik GPU nicht nur für Rendering Scattering Reduce Voxelisierung OpenGL DirectX Unterschiede 40
Parallele l Programmierung mit CUDA Die GPU als Parallelprozessor CUDA Programmiermodell Grid, Block, Thread Grundlagen CUDA Programmierung Funktionen und Variablen KernelFunktionen Hello World CUDA Programm z.b. Addition zweier (großer) Vektoren, Skalarprodukt, Bildfilterung, Host Kernel 1 Kernel 2 Block (1, 1) Device Grid 1 Block (0, 0) Block (0, 1) Gid2 Grid Block (1, 0) Block (1, 1) Thread Thread Thread Thread Thread (0, 0) (1, 0) (2, 0) (3, 0) (4, 0) Block (2, 0) Block (2, 1) Thread (0, 1) Thread (1, 1) Thread (2, 1) Thread (3, 1) Thread (4, 1) Thread (0, 2) Thread (1, 2) Thread (2, 2) Thread (3, 2) Thread (4, 2) 41
Parallele l Programmierung mit CUDA Speichertypen Global, Texture, Constant, Shared, Local, Register Threads and Warps Thread Synchronisation Barrier Atomic Operations Page Locked Memory Streams Host Grid Block (0, 0) Registers Local Memory Shared Memory Thread (0, 0) Global Memory Registers Thread (1, 0) Local Memory Block (1, 0) Shared Memory Registers Registers Thread (0, 0) Thread (1, 0) Local Local Memory Memory Constant Memory Texture Memory 42
Verschiedene physikalische h Simulationen i mit CUDA Paralleles Lösen von Differentialgleichungen N-Body Deformationen Wärmeausbreitung Lichtausbreitung Können oft parallelisiert werden Verbindung CUDA mit OpenGL Quelle: NVIDIA 43
Parallele l Programmierung mit CUDA Paralleles Sortieren Bitonic Merge Sort Paralleler Speicherzugriff Scan 44
Zi Zeitplan Vorlesung Datum Thema 16.4.2012 Einführung, GPU History Erste Übung am 19.4. Einführung, Bedienung der 23.4.2012 OpenGL Wiederholung, Pipeline Rechner, Vorstellung der Projektthemen Ausgabe 1. Übungsblatt 752012 7.5.2012 Vertex / Fragment Shader, Multi-Pass nächste Woche auf der Rendering, Deep Framebuffer, MRT Webseite 14.5.2012 --- fällt aus --- Kontrolle 1. Übungsblatt übernächste Woche in der Übung Keine Übung am 17.5. 30.4.2012 Fortgeschrittene OpenGL Programmierung 21.5.2012 Geometry / Tessellation Shader, Transform Feedback 28.5.2012 --- Feiertag --- Ü 4.6.2012 General Purpose GPU, DirectX OpenGL Vergleich Vorstellung der Projekte am 11.6.2012 CUDA Einführung 12.7. 18.6.2012 CUDA Speicher / Synchronisation 25.6.2012 CUDA Physik Simulationen 272012 2.7.2012 CUDA Sortierung 9.7.2012 Wiederholung 45
Literatur 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 Gems 1 3 ShaderX 1 7 GPU Pro 1 3 Aktuelles zu OpenGL und GLSL: www.opengl.org 46
Literatur CUDA by Example J. Sanders, E. Kandrot Addison Wesley Programming Massively Parallel Processors D. Kirk, W. Hwu Morgan Kaufmann GPU Computing Gems Alle Bücher sind in der Bibliothek als Präsenz und Ausleihexemplar vorhanden Aktuelles zu CUDA: www.nvidia.com 47
Genug für heute Übung am Donnerstag Nächste Vorlesung 23.4. OpenGL Wiederholung 48