Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Stefan Auer computer graphics & visualization Graphics Processing Unit General Purpose Computation on.

Ähnliche Präsentationen


Präsentation zum Thema: "Stefan Auer computer graphics & visualization Graphics Processing Unit General Purpose Computation on."—  Präsentation transkript:

1 Stefan Auer computer graphics & visualization Graphics Processing Unit General Purpose Computation on

2 computer graphics & visualization Inhalt 1)Motivation 2)Hardware Design aktueller GPUs 3)GPGPU mit Standard APIs 4)Anwendungsbeispiele 5)GPGPU a la Nvidia 6)GPGPU a la AMD/ATI Stefan Auer

3 computer graphics & visualization 1)Motivation - GPUs sind äußerst leistungsfähige Parallelrechner - Beispiel: Nvidia GeForce 8800 GTX - 128Stream Prozessoren - ~690millionen Transistoren MHz Shader clock speed - 86GB/s Speicherbandbreite (Peak) - 345Gflops Floatingpoint-Leistung (Peak, Multiply-ADD) - Vergleich: Intel Core 2 Quad Q Kerne (zwei Doppelkernprozessoren) - ~580millionen Transistoren MHz Takt - ~5GB/s Speicherbandbreite (gemessen) - ~40Gflops FPU-Leistung (gemessen, Whetstone) Stefan Auer

4 computer graphics & visualization Stefan Auer 1)Motivation GflopsFMULFADD 50% FMUL / 50% FADD FMADD GeForce 8800 GTX172,8 345,6 GeForce 8800 GTS115,2 230,4 Core 2 Extreme QX670042,7 85,342,7 Core 2 Extreme X680023,5 46,923,5 Quelle: behardware.com Vergleich der Floatingpointleistung Gflops

5 computer graphics & visualization 1)Motivation - Leistungszuwachs war bei GPUs in letzter Zeit größer als bei CPUs (GPUs profitieren mehr als CPUs von Verbesserungen der Fertigung) Stefan Auer 100% 1355% 100% 503% Quelle: tomshardware.com

6 computer graphics & visualization 1)Motivation - Einsatzzweck von GPUs ist das Rendering von interaktiven 3D Anwendungen Stefan Auer ->GPUs sind vergleichsweise preiswert (Videospiele sind Massenmarkt) - - GeForce 8800 GTX aktuell ~ 450.-

7 computer graphics & visualization GPUCPU VerticesPrimitive (z.B. Dreiecke) Programmierbare Rendering Pipeline Vertex Shader Geometrie Shader (DX10) Pixel Shader Fragmente (Pre-Pixels) Pixel (Farbe, Tiefe) Stefan Auer 1)Motivation

8 computer graphics & visualization Inhalt 1)Motivation 2)Hardware Design aktueller GPUs 3)GPGPU mit Standard APIs 4)Anwendungsbeispiele 5)GPGPU a la Nvidia 6)GPGPU a la AMD/ATI Stefan Auer

9 computer graphics & visualization 2)Hardware Design aktueller GPUs Stefan Auer Quelle: Nvidia 8 vertex shader pipelines 24 pixel shader pipelines 16 raster operation pipelines 32 ppc Nvidia G70 Architektur (GeForce 7800) Nvidia G70 Architektur (GeForce 7800)

10 computer graphics & visualization 2)Hardware Design aktueller GPUs Unified shader (1) - Höhere Flexibilität - geometry shader, Spielphysik ?, general purpose - Bessere Ausnutzung der Hardware Stefan Auer Viel GeometrieWenig Geometrie Lastverteilung Quelle: Nvidia

11 computer graphics & visualization 2)Hardware Design aktueller GPUs Unified shader (2) Stefan Auer Vertex Shader Pixel Shader Idle hardware Vertex Shader Pixel Shader Idle hardware Heavy Geometry Heavy Pixel Quelle: Nvidia

12 computer graphics & visualization 2)Hardware Design aktueller GPUs Unified shader (3) Stefan Auer Heavy Geometry Heavy Pixel Quelle: Nvidia Unified Shader Vertex workload Pixel workload Vertex workload

13 computer graphics & visualization 2)Hardware Design aktueller GPUs Stefan Auer L2 FB SP L1 TF Thread Processor Vtx Thread Issue Setup / Rstr / ZCull Geom Thread IssuePixel Thread Issue Data Assembler Host SP L1 TF SP L1 TF SP L1 TF SP L1 TF SP L1 TF SP L1 TF SP L1 TF L2 FB L2 FB L2 FB L2 FB L2 FB Quelle: Nvidia 128 unified shader pipelines 6 ROPs 192 ppc Nvidia G80 Architektur (GeForce 8800) Nvidia G80 Architektur (GeForce 8800)

14 computer graphics & visualization 2)Hardware Design aktueller GPUs CPU vs. GPU: CPU Architektur - CPUs implementieren Von Neumann Architektur - Von Neumann Flaschenhals - Teilung von ALU und Speicher schafft Bandbreitenprobleme - heutige ALUs sind wesentlich schneller als die Datenverbindungen - cache management notwendig > großer Kontroll-Overhead - > für rechenintensive Anwendungen verbleibt weniger Leistung Stefan Auer

15 computer graphics & visualization 2)Hardware Design aktueller GPUs CPU vs. GPU: GPU Architektur - GPUs entsprechen annähernd Stream Processing Architektur - Anwendung organisiert in Streams und Kernel - fördert Lokalität der Daten und Parallelität ihrer Verarbeitung Stefan Auer

16 computer graphics & visualization 2)Hardware Design aktueller GPUs CPU vs. GPU: Gegenüberstellung - CPU: profitiert hauptsächlich von Aufgabenparallelität - schnelle (aber kostspielige) Caches - Pipelines auf Sprünge optimiert - wenige Ausführungseinheiten (1,2,4,...) - hohe Leistung bei Bearbeitung einzelner Threads - GPU: profitiert zusätzlich von Datenparallelität - sehr viele ALUs, spezialisiert auf floating-point Arithmetik - sehr hohe Speicherbandbreite (aber hohe Latenz) - tausende Threads mit gleichem Kernel Stefan Auer

17 computer graphics & visualization Inhalt 1)Motivation 2)Hardware Design aktueller GPUs 3)GPGPU mit Standard APIs 4)Anwendungsbeispiele 5)GPGPU a la Nvidia 6)GPGPU a la AMD/ATI Stefan Auer

18 computer graphics & visualization 3)GPGPU mit Standard APIs Standard-Verwendung der Pipeline bei GPGPU Stefan Auer

19 computer graphics & visualization 3)GPGPU mit Standard APIs Texturen als computational grids - (ein) typischer GPGPU Programmierstil - Texturen repräsentieren Streams (Texel = Datenelement) - Fragmentprogramme (pixel shader) repräsentieren Kernel - Zeichnen eines Full-Screen-Rechtecks repräsentiert Berechnungschritt Stefan Auer

20 computer graphics & visualization 3)GPGPU mit Standard APIs - viele Berechnungen lassen sich gut auf Grids abbilden: - Matrix Algebra - Bild- und Volumenverarbeitung - Physiksimulationen - Global Illumination - ray tracing, photon mapping, radiosity - Streams die keinen Grids entsprechen lassen sich meist darauf abbilden Stefan Auer

21 computer graphics & visualization 3)GPGPU mit Standard APIs GPGPU Hello World (1) - Bildverarbeitung: 3x3 Faltung - Input:Bild, Gewichtungen - Output:geblurrtes Bild CPU Version: image = loadImage(WIDTH, HEIGHT); blurImage = allocZeros(WIDTH, HEIGHT); for (x=0; x < WIDTH; x++) for (y=0; y < HEIGHT; y++) for (i=-1; i <= 1; i++) for (j=-1; j <= 1; j++) float w = computeWeight(i,j); blurImage[x][y] += w * image[x+i, y+j]; Stefan Auer

22 computer graphics & visualization 3)GPGPU mit Standard APIs GPGPU Hello World (2) GPU Version: 1)Lade image als Textur 2)erstelle blurImage Textur welche das Ergebnis aufnimmt Stefan Auer

23 computer graphics & visualization 3)GPGPU mit Standard APIs GPGPU Hello World (3) GPU Version: 3)Lade Fragment-Programm (Kernel) Beispielcode in CG: float4 blurKernel(uniform samplerRECT image, float2 winPos : WPOS, out float4 blurImage ) { blurImage = float4(0,0,0,0); for (i=-1; i <= 1; i++) { for (j=-1; j <= 1; j++) { float2 texCoord = winPos + float2(i,j); float w = computeWeight(i,j); blurImage += w * texRECT( image, texCoord ); } Stefan Auer

24 computer graphics & visualization 3)GPGPU mit Standard APIs GPGPU Hello World (4) GPU Version: 4)wähle Viewport-Größe entsprechend Bildgröße konfiguriere Vertex Pipeline so dass sie nichts tut Beispielcode für OpenGl: glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluOrtho2D(0, 1, 0, 1); glViewport(0, 0, WIDTH, HEIGHT ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); Stefan Auer

25 computer graphics & visualization 3)GPGPU mit Standard APIs GPGPU Hello World (5) GPU Version: 5)binde image als Textur, blurKernel als Fragment-Programm und blurImage als Render-Target 6)zeichne ein Full-Screen-Rechteck glBegin( GL_TRIANGLES ); glVertex2f(0, 0); glVertex2f(2, 0); glVertex2f(0, 2); glEnd(); Stefan Auer screen

26 computer graphics & visualization 3)GPGPU mit Standard APIs Was passiert? - blurKernel wird für jedes Fragment einmal ausgeführt - das Rendering ersetzt die äußeren beiden Schleifen der CPU- Version - blurKernel führt für jedes Fragment 9 Gather (p=a[i]) Operationen durch und gewichtet jeden Wert - die geblurrten Ergebnis-Pixel werden in den Framebuffer bzw. in die blurImage Textur geschrieben Stefan Auer

27 computer graphics & visualization 3)GPGPU mit Standard APIs GPGPU Techniken (1) - Scatter Nachbildung - Problem: a[i]=p - indirektes Schreiben - Position des Fragments kann im Pixel-Shader nicht mehr geändert werden - Lösung 1: Auf Gather abbilden - erster Schritt: Kernel 1 ermittelt Werte und speichert in Zwischenergebnis - zweiter Schritt: Kernel 2 sammelt Zwischenergebnisse an der passenden Stelle ein Stefan Auer 12

28 computer graphics & visualization 3)GPGPU mit Standard APIs GPGPU Techniken (2) - Scatter Nachbildung - Lösung 2: Adresssortierung - erster Schritt: Kernel 1 ermittelt Werte und speichert sie gemeinsam mit Zieladresse in Zwischenergebnis - zweiter Schritt: Kernel 2 führt auf dem Zwischenergebnis bitonic-sort nach Adressen durch - dritter Schritt: Kernel 3 findet die passenden Werte durch binäre Suche Stefan Auer

29 computer graphics & visualization 3)GPGPU mit Standard APIs GPGPU Techniken (3) - Scatter Nachbildung - Lösung 3: Vertex Shader - führe Rechnung im Vertex Shader durch - Zeichne Punkte - Vertex Position = Adresse - führe Rechnung im Pixel Shader durch - schreibe Adresse und Wert in Textur - Zeichne Punkte - lies Textur im Vertex Shader (Vertex Texture Fetch) und passe Position an Adresse an Stefan Auer

30 computer graphics & visualization 3)GPGPU mit Standard APIs GPGPU Techniken (4) - Reduce - Problem: Reduktion der Wertanzahl durch Zusammenfassung - Lösungen: Zeilen-/Spaltenweise, Blockweise immer mehrere Passes notwendig - Filtering - Problem: Reduktion der Wertanzahl durch entfernen bestimmter Werte - Sortierung - Lösung: Sorting Networks Stefan Auer

31 computer graphics & visualization 3)GPGPU mit Standard APIs GPGPU Techniken (5) - Suche - Problem: Suche nach bestimmten Werten, Werten die bestimmte Eigenschaften erfüllen oder Nachbarn von bestimmten Werten - sinnvoll auf GPU bei vielen parallelen Suchen - Datenstrukturen - Arrays und Matrizen (dicht- und dünnbesetzt) - adaptive Datenstrukturen (adp. shadow maps, octrees,…) Stefan Auer

32 computer graphics & visualization 3)GPGPU mit Standard APIs GPGPU Techniken (6) - Branching - statisch - vermeiden von Branches, wenn vorab bekannt ist welche Elemente betroffen sind - Nutzung des z-Buffers - bedingte writes - Nutzung mathematischer Konstrukte als Branch-Ersatz - sinnvolle Verwendung der Branching-Unterstützung in shader-model 3 und 4 Stefan Auer

33 computer graphics & visualization Inhalt 1)Motivation 2)Hardware Design aktueller GPUs 3)GPGPU mit Standard APIs 4)Anwendungsbeispiele 5)GPGPU a la Nvidia 6)GPGPU a la AMD/ATI Stefan Auer

34 computer graphics & visualization 4)Anwendungsbeispiele Grundlegende (aus der Mathematik): - Differentielle Gleichungen & … - gewöhnliche (ODE), z.B. für Partikel Systeme - partielle (PDE), z.B. für Fluid Simulationen (Navier Stokes) - … Lineare Algebra - z.B. für numerische Simulation, Ray tracing, realtime Shading & Lighting Stefan Auer

35 computer graphics & visualization 4)Anwendungsbeispiele Allgemeine (1): - Relationale Datenbanken - Query-Beschleunigung z.B. durch beschleunigtes Join - Simulation physikalischer Phänomene - finite Differenzen & finite Elemente - z.B. für Fluide (Flüssigkeiten, Gase) - Signal- und Bildverarbeitung - Segmentierung: Erkennen von Objekten (z.B. Tumor in medizinischen Scans) - Computer Vision -... Stefan Auer

36 computer graphics & visualization 4)Anwendungsbeispiele Allgemeine (2): - Global Illumination - Ray tracing - Photon mapping - Radiosity - Subsurface scattering Stefan Auer

37 computer graphics & visualization 4)Anwendungsbeispiele Havok FX - entstanden durch Zusammenarbeit von Havok und Nvidia - Nutzung der GPU für Effekt Physik in Spielen Stefan Auer

38 computer graphics & visualization Inhalt 1)Motivation 2)Hardware Design aktueller GPUs 3)GPGPU mit Standard APIs 4)Anwendungsbeispiele 5)GPGPU a la Nvidia 6)GPGPU a la AMD/ATI Stefan Auer

39 computer graphics & visualization 5)GPGPU alla Nvidia Nachteile von Grafik APIs: - sehr hohe Lernkurve für Nicht-Grafik-Entwickler - Pipeline? - Texturen? (sampler, filtering, blending) - Framebuffer? - unpassende Abstraktionen für Nicht-Grafik-Programme - Vertices/Primitive/Fragmente + jeweils spezielle Programme dafür - unflexibler Speicherzugriff - fehlendes Scatter - zuwenig Kontrolle - (Grafik-) Treiber + API treffen wichtige Entscheidungen - Treiber ändern sich - Grafik-Optimierungen teilweise kontrapoduktiv Stefan Auer

40 computer graphics & visualization 5)GPGPU alla Nvidia Stefan Auer L2 FB SP L1 TF Thread Processor Vtx Thread Issue Setup / Rstr / ZCull Geom Thread IssuePixel Thread Issue Data Assembler Host SP L1 TF SP L1 TF SP L1 TF SP L1 TF SP L1 TF SP L1 TF SP L1 TF L2 FB L2 FB L2 FB L2 FB L2 FB Quelle: Nvidia Nvidia G80 als GPU Nvidia G80 als GPU

41 computer graphics & visualization 5)GPGPU alla Nvidia Stefan Auer Quelle: Nvidia Nvidia G80 als GPGPU Nvidia G80 als GPGPU

42 computer graphics & visualization 5)GPGPU alla Nvidia CUDA - Compute Unified Device Architecture - Plattform für GPGPU auf Nvidia G80 (und höher) - nutzt das C Subset von C++ (mit ein paar Erweiterungen) als Programmiersprache - ersetzt (für GP-Anwendungen) Grafik API und Treiber - CUDA und Grafik Anwendungen parallel möglich (OS- Multitasking) Stefan Auer

43 computer graphics & visualization CUDA Software Stack 5)GPGPU alla Nvidia Stefan Auer CPU (Host) CPU (Host) Anwendung CUDA Libraries CUDA Runtime CUDA Driver GPU

44 computer graphics & visualization 5)GPGPU alla Nvidia CUDA aus Compiler-Sicht - NVCC ist compiler driver (ähnlich gcc) - NVCC verarbeitet CUDA Programme (.cu) - Host-Code wird entweder extrahiert (->.cpp) oder sofort kompiliert (z.B. Visual Studio Kompilier) - Device Code wird für PTX kompiliert - PTX Code wird zur Installationszeit für das jeweilige Device (z.B. G80) kompiliert Stefan Auer

45 computer graphics & visualization 5)GPGPU alla Nvidia PTX - PTX: parallel thread execution - virtuelle Maschine und ISA - Programmiermodell - Abstraktion von Ressourcen und State - ISA: instruction set architecture - formale Spezifikation des Verhaltens eines Prozessors aus Sicht des Programmierers - PTX-Übersetzter ist optimizing compiler - übersetzt PTX in Zielmaschinencode (z.B. für G80) - wird zur Installationszeit ausgeführt - CUDA Treiber implementiert die virtuelle Maschine - stellt Übersetzer zur Verfügung Stefan Auer

46 computer graphics & visualization 5)GPGPU alla Nvidia CUDA Programmiermodell - GPU ist Coprozessor der CPU (CPU = Host) - datenparallele Programmteile werden für die GPU kompiliert und dort als Kernel ausgeführt - implizites Multithreadding: derselbe Kernel wird auf der GPU (hundertfach) parallel von (tausenden) Threads auf unterschiedlichen Daten (SIMD) ausgeführt - eigener Speicher für CPU (host memory) und GPU (device memory); Hin-und-Her-Kopieren durch DMA - indirekte Ressourcenverteilung (Threads, Register, Shared- Memory) durch Programmierer notwendig Stefan Auer

47 computer graphics & visualization 5)GPGPU alla Nvidia Stefan Auer Zahlen gelten für GeForce 8800 CUDA Threadmanagement - Grid - alle Threads führen denselben Kernel aus - alle Blöcke haben die selben Dimensionen - Block - zu jeder Zeit nur ein Block aktiv auf jedem Multiprozessor - alle Threads teilen sich Register (per Thread) und Shared Memory (per Block) - Synchronisation zwischen Threads möglich Grid Block (0,0) Block (0,1) Block (0,2) Block (0,3) Block (1,0) Block (1,1) Block (2,0) Block (2,1) Block … Block … Block … Block … Block Thread (0,0) Thread (0,1) Thread (0,2) Thread (1,0) Thread (1,1) Thread (1,2) Thread (2,0) Thread (2,1) Thread (2,2) Thread

48 computer graphics & visualization GPU 5)GPGPU alla Nvidia Stefan Auer Zahlen gelten für GeForce 8800 CUDA Threadausführung TextureTextureTextureTextureTextureTextureTextureTexture Texture Parallel Data Cache Streaming Multiprocessor (SM) SP 0 SP 1 SP 2 SP 3 SP 4 SP 5 SP 6 SP 7 Constant L1 Cache Instruction Fetch Instruction L1 Cache Thread / Instruction Dispatch Shared Memory RF 0 RF 1 RF 2 RF 3 RF 4 RF 5 RF 6 RF 7 ein Multiprozessor führt zu jeder Zeit nur einen aktiven Block aus ein Multiprozessor kann 8 Blöcke ausführen (scheduling) die Threads eines Blocks werden ausgeführt als Warps a 32 Threads ein Multiprozessor kann insgesamt 24 Warps ausführen (scheduling) eine Instruktion benötigt pro Warp je nach Art zwischen 4 (z.B. FMADD) und 32 (z.B. IMUL) clock cycles

49 computer graphics & visualization GPU 5)GPGPU alla Nvidia Stefan Auer CUDA Speicherbereiche (1) TextureTextureTextureTextureTextureTextureTextureTexture Texture Parallel Data Cache Streaming Multiprocessor (SM) SP 0 SP 1 SP 2 SP 3 SP 4 SP 5 SP 6 SP 7 Constant L1 Cache Instruction Fetch Instruction L1 Cache Thread / Instruction Dispatch Shared Memory RF 0 RF 1 RF 2 RF 3 RF 4 RF 5 RF 6 RF 7 Device Memory Constants (cached) Textures (cached) Global (uncached) Local (uncached) Jeder Thread kann: pro ThreadRegister Lesen/Schreiben pro ThreadLocal Memory L/S pro BlockShared Memory L/S pro GridGlobal Memory L/S pro GridConstant Memory nur L pro GridTexture Memory nur L

50 computer graphics & visualization GPU 5)GPGPU alla Nvidia Stefan Auer CUDA Speicherbereiche (2) TextureTextureTextureTextureTextureTextureTextureTexture Texture Parallel Data Cache Streaming Multiprocessor (SM) SP 0 SP 1 SP 2 SP 3 SP 4 SP 5 SP 6 SP 7 Constant L1 Cache Instruction Fetch Instruction L1 Cache Thread / Instruction Dispatch Shared Memory RF 0 RF 1 RF 2 RF 3 RF 4 RF 5 RF 6 RF 7 Device Memory Constants (cached) Textures (cached) Global (uncached) Local (uncached) Alle Threads eines Blocks teilen sich Shared Memory (per Block) und Register (per Thread) ->verfügbare Registerzahl = Register pro SM / Threads pro Block Kernel die mehr Register verwenden können nicht gestartet werden

51 computer graphics & visualization GPU 5)GPGPU alla Nvidia Stefan Auer CUDA Speicherbereiche (3) TextureTextureTextureTextureTextureTextureTextureTexture Texture Parallel Data Cache Streaming Multiprocessor (SM) SP 0 SP 1 SP 2 SP 3 SP 4 SP 5 SP 6 SP 7 Constant L1 Cache Instruction Fetch Instruction L1 Cache Thread / Instruction Dispatch Shared Memory RF 0 RF 1 RF 2 RF 3 RF 4 RF 5 RF 6 RF 7 Device Memory Constants (cached) Textures (cached) Global (uncached) Local (uncached) Der Host kann: Constant Memory L/S Texture Memory L/S Global Memory L/S

52 computer graphics & visualization GPU 5)GPGPU alla Nvidia Stefan Auer Zahlen gelten für GeForce 8800 GTX CUDA Speicherbereichgrößen TextureTextureTextureTextureTextureTextureTextureTexture Texture Parallel Data Cache Streaming Multiprocessor (SM) SP 0 SP 1 SP 2 SP 3 SP 4 SP 5 SP 6 SP 7 Constant L1 Cache Instruction Fetch Instruction L1 Cache Thread / Instruction Dispatch Shared Memory RF 0 RF 1 RF 2 RF 3 RF 4 RF 5 RF 6 RF 7 Device Memory Constants (cached) Textures (cached) Global (uncached) Local (uncached) Register pro SM8192 (-> pro Thread) Shared Memory pro SM16 kB Constant Memory64 kB Constant Mem. Cache pro SM8 kB Kernelsize2 M Instr. Device Memory gesamt758 MB

53 computer graphics & visualization GPU 5)GPGPU alla Nvidia Stefan Auer CUDA Synchronisation TextureTextureTextureTextureTextureTextureTextureTexture Texture Parallel Data Cache Streaming Multiprocessor (SM) SP 0 SP 1 SP 2 SP 3 SP 4 SP 5 SP 6 SP 7 Constant L1 Cache Instruction Fetch Instruction L1 Cache Thread / Instruction Dispatch Shared Memory RF 0 RF 1 RF 2 RF 3 RF 4 RF 5 RF 6 RF 7 Device Memory Constants (cached) Textures (cached) Global (uncached) Local (uncached) keine Synchronisation zwischen Threads unterschiedlicher Blöcke Ausführungsreihenfolge generell undefiniert Scattersuppport -> Schreiben mehr als ein Thread an selbe Stelle (shared oder global) -> undefiniert Synchronisationspunkte (Barrieren) Atomare Operationen (Read-Modify-Write) (nur Compute Capability 1.1, nur 32 bit INT)

54 computer graphics & visualization 5)GPGPU alla Nvidia CUDA aus Programmierersicht (1) C/C++ mit ein paar kleinen Erweiterungen: - Spezifikation des Funktionstyps - __host__, __global__, __device__ - Spezifikation des Variablentyps - __device__, __constant__, __shared__ - Kernelausführungskonfiguration - KernelFunc >>(...) Stefan Auer

55 computer graphics & visualization 5)GPGPU alla Nvidia CUDA aus Programmierersicht (2) Einige integrierte Variablen: - gridDim, blockIdx, blockDim, threadIdx zusätzliche Speicherverwaltungs-Funktionen - cudaMalloc(), cudaFree() - cudaMemcpy(), cudaMemcpy2D() Stefan Auer

56 computer graphics & visualization 5)GPGPU alla Nvidia CUDA Beispiel: Matrix Mul - P=M*Njeweils mit Größe WIDTH x WIDTH - jeder Thread behandelt ein Element aus P - Nutzung nur eines Blocks -> WIDTH <= sqrt(512) - schlechtes Verhältnis von OPs zu Speicherzugriffen (ca. 1:1) -> kein Musterbeispiel Stefan Auer M N P WIDTH

57 computer graphics & visualization 5)GPGPU alla Nvidia Matrix Mul als Host (CPU) Programm void MatrixMulOnHost(const Matrix M, const Matrix N, Matrix P) { for (int i = 0; i < M.height; ++i) for (int j = 0; j < N.width; ++j) { double sum = 0; for (int k = 0; k < M.width; ++k) { double a = M.elements[i * M.width + k]; double b = N.elements[k * N.width + j]; sum += a * b; } P.elements[i * N.width + j] = sum; } Stefan Auer M N P WIDTH

58 computer graphics & visualization 5)GPGPU alla Nvidia CUDA Matrix Mul: Hauptprogramm int main(void) { // Allocate and initialize the matrices Matrix M = AllocateMatrix(MATRIX_SIZE, MATRIX_SIZE, 1); Matrix N = AllocateMatrix(MATRIX_SIZE, MATRIX_SIZE, 1); Matrix P = AllocateMatrix(MATRIX_SIZE, MATRIX_SIZE, 0); // M * N on the device MatrixMulOnDevice(M, N, P); // Free matrices FreeMatrix(M); FreeMatrix(N); FreeMatrix(P); return 0; } Stefan Auer M N P WIDTH

59 computer graphics & visualization 5)GPGPU alla Nvidia CUDA Matrix Mul: Host Funktion (1) // Matrix multiplication on the device void MatrixMulOnDevice(const Matrix M, const Matrix N, Matrix P) { // Load M and N to the device Matrix Md = AllocateDeviceMatrix(M); // contains cudaMalloc() CopyToDeviceMatrix(Md, M); // contains cudaMemcpy() Matrix Nd = AllocateDeviceMatrix(N); CopyToDeviceMatrix(Nd, N); // Allocate P on the device Matrix Pd = AllocateDeviceMatrix(P); CopyToDeviceMatrix(Pd, P); // Clear memory... Stefan Auer M N P WIDTH

60 computer graphics & visualization 5)GPGPU alla Nvidia CUDA Matrix Mul: Host Funktion (2)... // Setup the execution configuration dim3 dimBlock(MATRIX_SIZE, MATRIX_SIZE); dim3 dimGrid(1, 1); // Launch the device computation threads! MatrixMulKernel >>(Md, Nd, Pd); // Read P from the device CopyFromDeviceMatrix(P, Pd); // contains cudaMemcpy() // Free device matrices FreeDeviceMatrix(Md); // contains cudaFree() FreeDeviceMatrix(Nd); FreeDeviceMatrix(Pd); } Stefan Auer M N P WIDTH

61 computer graphics & visualization 5)GPGPU alla Nvidia CUDA Matrix Mul: Kernel // Matrix multiplication kernel – thread specification __global__ void MatrixMulKernel(Matrix M, Matrix N, Matrix P) { // 2D Thread ID int tx = threadIdx.x; int ty = threadIdx.y; // Pvalue is used to store one matrix element computed by the thread float Pvalue = 0; for (int k = 0; k < MATRIX_SIZE; ++k) { float Melement = M.elements[ty * M.pitch + k]; float Nelement = N.elements[k * N.pitch + tx]; Pvalue += Melement * Nelement; } P.elements[ty * P.pitch + tx] = Pvalue; } Stefan Auer M N P WIDTH

62 computer graphics & visualization 5)GPGPU alla Nvidia CUDA Performance Guidelines - auf hohe arithmetische Dichte achten - Speicher Latenz verbergen (teilweise schon durch Compiler) - Shared Memory (on chip) ausnutzen - Cache-freundliche Speicherzugriffe - Zugriff auf lokalen und globalen Speicher (uncached) meiden - viele (tausende) Blöcke und Threads verwenden Stefan Auer

63 computer graphics & visualization 5)GPGPU alla Nvidia Zukunft von CUDA - Nvida bietet spezielle GP Hardware an: Tesla - Nächste GPU Generation (G90) bringt wichtige Änderungen für GPGPU (z.B. double precision), jedoch teils nur für Tesla Stefan Auer

64 computer graphics & visualization 5)GPGPU alla Nvidia CUDA Bewertung +für nicht grafiknahe Anwendungen besser geeignet als Grafik-API +erstes Produkt das eine kritische Masse von Nicht-Grafik- Programmierern für GPGPU interessieren könnte +/-Weiterentwicklung könnte von kommerziellem Erfolg der damit verbundenen Nvidia Produkte (Tesla) abhängen - noch nicht ausgereift (Dokumentation mager, Programmierung könnte eleganter sein) - setzt zwingend Nvidia GPUs voraus Stefan Auer

65 computer graphics & visualization Inhalt 1)Motivation 2)Hardware Design aktueller GPUs 3)GPGPU mit Standard APIs 4)Anwendungsbeispiele 5)GPGPU a la Nvidia 6)GPGPU a la AMD/ATI Stefan Auer

66 computer graphics & visualization 6)GPGPU alla AMD/ATI data parallel virtual machine (DPVM) (1) - Grundgedanken: - Programmierer soll GPGPU-relevante Hardware möglichst direkt ansteuern können - command processor: liest command buffer und verteilt Arbeit auf prozessor arrays - data parallel processor arrays: Floating Point Prozessoren; führen nativen Binärcode aus - memory controler: verwaltet GPU zugreifbaren Speicher; Anwendung trägt Verantwortung: Speicherbereiche und -Formate, Cach-Invalidierung - rein grafikrelevante Hardware bleibt versteckt - Standard-API und Treiber wird umgangen Stefan Auer

67 computer graphics & visualization 6)GPGPU alla AMD/ATI data parallel virtual machine (DPVM) (2) Stefan Auer

68 computer graphics & visualization 6)GPGPU alla AMD/ATI data parallel virtual machine (DPVM) (3) - Implementierung für die X1k Serie heißt CTM (close to metal) - Beschreibung der Architektur (ISA, Ressourcen, etc.) - Runtime als low level Treiberkomponenten - Support Librarys - command buffer Generierung - Speicherallokation - Assembler - Implementierung von high-level-Tools (Programmiersprachen, Debugger, Bibliotheken) bleibt Dritten überlassen Stefan Auer

69 computer graphics & visualization 6)GPGPU alla AMD/ATI DPVM/CTM Bewertung +interessant für Tool-Entwickler +ermöglicht low-level Optimierungen - für viele Programmierer uninteressant, da ZU nah an Hardware (unausgereifter GPU-Assembler vs. ausgereiftes aber unpassendes Grafik-API) Stefan Auer

70 computer graphics & visualization 6)GPGPU alla Nvidia mögliche GPGPU Zukunft bei AMD - AMD Fusion - heterogene Mehrkernprozessoren - CPUs und GPUs auf einem Die - Performancesteigerung bei Speicherzugriff denkbar Stefan Auer Speicher CPUGPU General PurposeData CentricGraphics CentricMedia Centric Quelle: AMD

71 computer graphics & visualization fin


Herunterladen ppt "Stefan Auer computer graphics & visualization Graphics Processing Unit General Purpose Computation on."

Ähnliche Präsentationen


Google-Anzeigen