Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 2D-Heat equation. 2 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme.

Ähnliche Präsentationen


Präsentation zum Thema: "1 2D-Heat equation. 2 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme."—  Präsentation transkript:

1 1 2D-Heat equation

2 2 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme Demo

3 3 Definition Mathematische Definition (2D): Beschreibt den Temperaturverlauf der - Fläche über der Zeit. Anwendungen in: Finanz Mathematik Statistik Physik, Chemie

4 4 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme Demo

5 5 Diskretisierung Diskretisierung des Gebietes Finite Differenzen Methode (FDM)

6 6 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme Demo

7 7 Iterationsverfahren Einsetzen in die DGL ergibt finiten Differenzenstern Filtern des Bildes mit diesem Filterkernel ergibt einen Zeitschritt Berechnungsverfahren: Jacobiverfahren gut parallelisierbar Gauß-Seidel Verfahren schlecht parallelisierbar

8 8 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme Demo

9 9 Mapping auf Cuda Durch Jacobiverfahren können viele Pixel unabhängig voneinander berechnet werden Kernel (Thread) berechnet ein gefiltertes Pixel Benötigt 4 umliegende Werte und sich selbst Grid berechnet eine Iteration (einen Filterdurchlauf) Bild wird in Blöcke zerlegt Anzahl der Iterationen (Filteraufrufe) bestimmt die simulierte Zeit der zu lösenden heat equation

10 10 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme Demo

11 11 heat.cu void heat() { // Kernel Konfiguration dim3 block(BLOCK_SIZE_X, BLOCK_SIZE_Y, 1); dim3 grid(width / block.x, height / block.y, 1); // Filteraufruf for(i = 0; i < iterations; i++) { filter >>(d_src, d_dst, width, height); // Pointeraustausch tmp = d_src; d_src = d_dst; d_dst = tmp; }

12 12 heat_kernel.cu (global) __global__ void filter_global(float* d_src, float* d_dst, int width, int height) { // Referenz ist linke obere Ecke des Filter Kernels int x = blockIdx.x * blockDim.x + threadIdx.x; int y = blockIdx.y * blockDim.y + threadIdx.y; int i = y * width + x; if(x < width - 2 && y < height - 2) { float sum = 0.0; // oben sum += 0.25 * d_src[i + 1]; // links sum += 0.25 * d_src[i + width]; // rechts sum += 0.25 * d_src[i + width + 2]; // unten sum += 0.25 * d_src[i + 2 * width + 1]; // Mitte schreiben d_dst[i + width + 1] = sum; }

13 13 __shared__ float img_block[BLOCK_SIZE_X + 2][BLOCK_SIZE_Y + 2]; img_block[tx + 1][ty + 1] = d_src[i];// Mitte lesen __syncthreads(); if(x > 0 && x 0 && y < height - 1) {//Bildrand nicht if(tx == 0) { verändern img_block[tx][ty + 1] = d_src[i - 1]; // links } else if(tx == blockDim.x - 1) { img_block[tx + 2][ty + 1] = d_src[i + 1]; // rechts } if(ty == 0) { img_block[tx + 1][ty] = d_src[i - width]; // oben } else if(ty == blockDim.y - 1) { img_block[tx + 1][ty + 2] = d_src[i + width]; // unten } __syncthreads(); // Rechnen float sum = 0.0; sum += 0.25 * img_block[tx][ty + 1]; sum += 0.25 * img_block[tx + 2][ty + 1]; sum += 0.25 * img_block[tx + 1][ty]; sum += 0.25 * img_block[tx + 1][ty + 2]; d_dst[i] = sum; // Zurückschreiben } heat_kernel.cu (shared)

14 14 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme Demo

15 15 Optimierung Speicherzugriffe zw. Host u. Device Speicherzugriffe zw. Host u. Device Durch umbiegen der Zeiger minimiert Shared memory verwendet Shared memory verwendet Coalscaled Speicherzugiff -32 * 4 Byte = 128 Byte werden pro Warp linear gelesen -Startadresse des source-images ist ganzzahliges Vielfaches von 128 Rechnen auf Shared Memory schneller Occupancy maximiert Occupancy maximiert Beste Kernel Konfiguration für unser Problem gefunden

16 16 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme Demo

17 17 Messungen Global Memory 8X – 8Y Bildgröße Zeit [ms] 64 x x x x x x X – 8Y Bildgröße Zeit [ms] 64 x x x x x x X – 16Y Bildgröße Zeit [ms] 64 x x x x x x

18 18 Messungen Shared Memory 8X – 8Y Bildgröße Zeit [ms] 64 x x x x x x X – 8Y Bildgröße Zeit [ms] 64 x x x x x x X – 16Y Bildgröße Zeit [ms] 64 x x x x x x

19 19 Global vs. Shared Global Memory (16X – 8Y) Bildgröße Zeit [ms] 64 x x x x x x Shared Memory (16X – 8Y) Bildgröße Zeit [ms] 64 x x x x x x

20 20 GPU vs. CPU DeviceGFLOPS Single Core ~ Dual Core ~ Quad Core ~ GPU ~ Single Core (faui07g) Single Core (faui07g) : Intel Pentium GHz Dual Core (faui08) Dual Core (faui08) : AMD Opteron 2.2 GHz Quad Core (faui06i): Intel Q GHz

21 21 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme Demo

22 22 Probleme Bildgrößen nur als Vielfaches von Blockgröße möglich Zeiten messen Timer in cuda hat inkonsistente Zeiten geliefert Profiler liefert bessere Ergebnisse Teilweise Branching und Bankkonflikte nicht vermeidbar

23 23 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme Demo

24 24 Demo Sascha …

25 25 ?


Herunterladen ppt "1 2D-Heat equation. 2 Überblick Definition Diskretisierung Iterationsverfahren Mapping auf Cuda Implementierung Optimierung Performance Vergleiche Probleme."

Ähnliche Präsentationen


Google-Anzeigen