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, 13-15 Uhr und 15-17 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_2011/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 Zur Bearbeitung 10 Rechner mit NV 460 Karte in Raum G29-426 betreute Übung Do 13-15 Uhr und 15-17 Uhr Windows, MS Visual Studio 2008, 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 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 überschritten wird Übernahme der Punkte bis zu 60% Übung+Projekt, 40% Prüfung 9
Projektthemen, z.b. N-Body Simulations 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 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 Zusätzliche Stühle wieder zurückbringen! 11
Zur Vorlesung Hinweis: Eine Vorlesung zur GPU ist immer deprecated Beispiel/Übungs-Programme verwenden verschiedene Versionen von OpenGL Rasante Entwicklung der GPU Erster Durchlauf der Vorlesung 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 Bitte keine Laptops während der Vorlesung verwenden 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 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 (Stand November 2010) 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
Parallele l Programmierung mit CUDA General Purpose GPU mit CUDA, z.b. Paralleles Sortieren auf der GPU Partikelsysteme Paralleles Lösen von Differentialgleichungen 43
Datum Thema 4.4.2011 Einführung, GPU History Zi Zeitplan Vorlesung 11.4.2011 OpenGL Wiederholung, Pipeline Erste Übung am 7.4. Einführung, Bedienung der Rechner, Vorstellung der Projektthemen Ausgabe 1. Übungsblatt nächste Woche auf der Webseite Kontrolle 1. Übungsblatt übernächste Woche in der Übung Keine Übung am 2.6. 18.4.2011 Fortgeschrittene OpenGL Programmierung 25.4.2011 -- Feiertag -- 2.5.2011 Vertex / Fragment Shader, Multi-Pass Rendering, Deep Framebuffer, MRT 9.5.2011 Geometry / Tessellation Shader, Transform Feedback 16.5.2011 General Purpose GPU, DirectX OpenGL Vergleich 23.5.2011 CUDA Einführung 30.5.2011 CUDA Speicher / Synchronisation 6.6.2011 CUDA Teil 3 Vorstellung der Projekte am 7.7. 7 20.6.2011 CUDA Teil 4 13.6.2011 -- Feiertag -- 27.6.2011 -- fällt voraussichtlich aus 4.7.2011 Wiederholung 44
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 Aktuelles zu OpenGL und GLSL: www.opengl.org 45
Literatur CUDA by Example J. Sanders, E. Kandrot Addison Wesley Programming Massively Parallel Processors D. Kirk, W. Hwu Morgan Kaufmann Alle Bücher sind in der Bibliothek als Präsenz und Ausleihexemplar vorhanden Aktuelles zu CUDA: www.nvidia.com 46
Genug für heute Übung am Donnerstag Aufteilung in zwei Gruppen Nächste Vorlesung 11.4. OpenGL Wiederholung 47