< CUDA implementation>

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Spektrale Analysen in EMU-R: eine Einführung
Kurzwiederholung Informatik I, Teil I: Grundkonzepte
Übersicht Anzeigegeräte Framebuffer Grundlagen 3D Computergrafik
Matrixmultiplikation
Eulerscher Polyedersatz
Constantin Timm Informatik 12 TU Dortmund
FH-Hof Der B-Baum Richard Göbel. FH-Hof Wahl des Verzweigungsgrad Verzweigungsgrad kann größer als 2 sein v Nachfolger für einen Knoten v-1 Werte in einem.
Zusammenfassung der Vorwoche
3. Kapitel: Komplexität und Komplexitätsklassen
SAP R/3 - Speichermanagement
Spektrale Analysen in EMU-R: eine Einführung
ARRAY oder FELD oder VEKTOR
Dynamische Programmierung (2) Matrixkettenprodukt
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Diskrete Mathematik I Vorlesung 6 Binärer Suchbaum II.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Parallele Gleichungslöser für die linearen TRACE-Module
Datenmanagement in Sensornetzen PRESTO - Feedback gesteuertes Datenmanagement - SS 2007 Sören Wenzlaff.
Random Heightmap on GPU
Matrix Multiplication on CUDA
< Best practices >
Beschleunigung Virtueller Privater Netze durch Netzwerkprozessoren
Ralf KüstersDagstuhl 2008/11/30 2 Ralf KüstersDagstuhl 2008/11/30 3.
Leitfaden Motivation Was ist CUDA ? NVIDIA Grafikkarte Programmierung
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Grundkonzepte Java - Klassendefinition
Daten auswerten Boxplots
Duo- und Quad Prozessor-Architektur
TWS/Graph HORIZONT Produkt-Präsentation Software für Rechenzentren
Animierte Schneeakkumulation mit dem Diffusionsschneemodell Dresden, Informatik Fakultät Institut für Softwaretechnik, Professur Computergraphik.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
Einführung in die Programmierung
GPU Computing Burim Kameri Fachhochschule Hannover (FHH)
GPU Computing Burim Kameri Fachhochschule Hannover (FHH)
HPI Bachelorprojekt Scalable EMF Vorstellung der Designdokumente Strukturen und Abläufe 1. März 2010.
Einführung in die Programmiersprache C 4
Auslegung eines Vorschubantriebes
Parallel Matrix Multiplication
Christian Mansky Design - Fallstudien Christian Mansky
Kapitel 18 Dynamische Modelle: Schätzen der Parameter
Ein Vortrag von Simon Bayer
Vorlesung Binärer Suchbaum II-
Inhalt Motivation Hardware Design aktueller GPUs
Grundlagen der Kommunikation in Verbindung mit der Codierung von Daten
Determinanten und Cramer‘sche Regel
Ein Überblick über verschiedene Verfahren
Analyseprodukte numerischer Modelle
0 Univ. Paderborn, FG Theoretische Elektrotechnik 0 Übersicht Motivation und Zielsetzung Grundlagen Funktionsprinzip einer Grafikarter.
Pflanzenlernkartei 3 Autor: Rudolf Arnold. Pflanze 1 Gattung Merkmale Schädigung Bekämpfung.
Pflanzenlernkartei 2 Autor: Rudolf Arnold. Pflanze 1 Gattung Merkmale Schädigung Bekämpfung.
JOMP
Parallelisierung für Multiprozessor-Maschinen
VMware® Virtual SAN™ Klassisches SAN. VMware® Virtual SAN™ Klassisches SAN.
Central Processing Unit von David Kleuker und Thomas Auner
Prozessoren im Jahre 2006 von Tobias Schulz.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Wissenschaftliches Rechnen auf Grafikkarten Achim Grolms Buyu Xiao Guanhua Bai Betreuer: Dipl.-Ing. Bastian Bandlow.
Wissenschaftliches Programmieren „CUDA“ Achim Grolms Buyu Xiao Guanhua Bai Betreuer: Dipl.-Ing. Bastian Bandlow.
Lineare Algebra Softwareprojekt: Anwendung von Algorithmen Sebastian Kürten, Philipp Borgers SoSe 2010.
Blowfish mit CUDA Dominik Oepen Inhalt ● Blowfish Grundlagen ● Implementierungsdetails ● Performance ● Fazit.
 Präsentation transkript:

< CUDA implementation> 2D-Heat equation < CUDA implementation>

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

Definition Mathematische Definition (2D): Beschreibt den Temperaturverlauf der - Fläche über der Zeit . Anwendungen in: Finanz Mathematik Statistik Physik, Chemie heat equation: zu Deutsch: Wärmeleitungsgleichung partielle DGL, weil partielle Ableitungen nach mehreren Argumenten vorkommen (Vgl. gewöhnliche DGL: Ableitungen nach nur einer Variablen) wie die meisten partiellen DGL dient sie zur Modellierung physikalischer Vorgänge -> sie beschreibt den Temperaturverlauf einer 2D-Ebene über der Zeit (heat source vorausgesetzt, also eine bestimmte Anfangsbedingung) Anwendung in der Physik selbst oder Maschinenbau, um den Temperaturverlauf eines Körpers (3D), einer Fläche (2D) oder eines Stabes (1D) zu simulieren (im Prinzip beliebige Dimensionen möglich, aber in der Praxis unüblich, weil wir uns kein 4-dimensionales Objekt vorstellen können in dem sich die Temperatur verteilt) k~ fungiert dabei als Materialkonstante auch möglich in der Bildverarbeitung, weil ein Smoothing der Werte erzeugt wird 3

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

Diskretisierung Diskretisierung des Gebietes Finite Differenzen Methode (FDM) Die Lösung dieser partiellen Differenzialgleichung ergibt eine Formel, die mir die Temperatur für die 2D-Fläche in Abhängigkeit von der Zeit berechnet (Anfangsbedingung vorausgesetzt) Lösungstheorie von partiellen Differentialgleichungen: für lineare Gleichungen weitgehend mathematisch erforscht für nichtlineare Gleichungen enthält die mathematische Theorie noch große Lücken praktische Berechnung von Lösungen werden in der Regel mit numerischen Verfahren durchgeführt numerische Verfahren: finite Elemente Methode finite Differenzen Methode finite Volumina Methode -> all diese Verfahren basieren auf einer Diskretisierung der partiellen DGL und die Lösung wird dann mit Hilfe eines endlichdimensionalen Gebildes approximiert (auch Gitter genannt) das Gebiet (wo die DGL gelten soll, also Def.Bereich) wird in eine endliche (finite) Zahl von Gitterpunkten zerlegt Schrittweite k auf der Zeitachse Schrittweite h auf der x- u. y-Achse Finite Differenzen Methode: Vorwärtsdifferenz Rückwärtsdifferenz zentrale Differenz (beste numerische Stabilität) für 2. Ableitung nach y analog 5

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

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 Einsetzen der finiten Differenzen in die Differenzialgleichung und auflösen nach dem Wert für den nächsten Zeitschritt mit dem entstehenden Differenzenstern muss man dann nur noch über das Bild filtern und erhält die Werte für den nächsten Zeitschritt iteratives Vorgehen zur Berechnung des konvergenten Verhaltens bei einer heat-source (sonst Ausgleichen) Jacobiverfahren (Pixel können unabhängig voneinander berechnet werden) rechnet aktuelle Werte unabhängig von zuvor berechneten Werten aus -> gute Parallelisierbarkeit, da keine Datenabhängigkeiten (aber schlechteres Konvergenzverhalten, als Gauß-Seidel) Gauß-Seidel Verfahren (Pixel sind abhängig voneinander) bezieht gerade berechnete Werte in die Berechnung der folgenden Werte mit ein -> konvergiert schneller als Jacobi, aber schlecht parallelisierbar, da Datenabhängigkeiten 7

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

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 „Bild“ ist quasi die Anfangsbedingung (Randbedingung) der heat-equation, die heat-source, die nur am Rand ist und erhalten bleiben soll, deshalb darf der Rand nicht überschrieben werden nach endlichen vielen Iterationen konvergieren die inneren Werte (hoffentlich ;)) 9

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

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<<<grid, block>>>(d_src, d_dst, width, height); // Pointeraustausch tmp = d_src; d_src = d_dst; d_dst = tmp; }

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; }

heat_kernel.cu (shared) __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 < width - 1 && y > 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 // 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

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

Optimierung Speicherzugriffe zw. Host u. Device Durch umbiegen der Zeiger minimiert 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 Beste Kernel Konfiguration für unser Problem gefunden - Branching bei Shared verschlechtert, da mehr if-Abfragen als bei global memory

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

Messungen Global Memory 8X – 8Y Bildgröße Zeit [ms] 64 x 64 0.0139 128 x 128 0.0532 256 x 256 0.2200 512 x 512 0.9000 1024 x 1024 3.6000 2048 x 2048 14.4000 16X – 8Y Bildgröße Zeit [ms] 64 x 64 0.0129 128 x 128 0.0478 256 x 256 0.1897 512 x 512 0.7576 1024 x 1024 3.0500 2048 x 2048 12.2200 16X – 16Y Bildgröße Zeit [ms] 64 x 64 0.0130 128 x 128 0.0500 256 x 256 0.1900 512 x 512 0.7560 1024 x 1024 3.0300 2048 x 2048 12.2700

Messungen Shared Memory 8X – 8Y Bildgröße Zeit [ms] 64 x 64 0.0083 128 x 128 0.0280 256 x 256 0.1160 512 x 512 0.4540 1024 x 1024 1.8000 2048 x 2048 7.3000 16X – 8Y Bildgröße Zeit [ms] 64 x 64 0.0044 128 x 128 0.0096 256 x 256 0.0260 512 x 512 0.0940 1024 x 1024 0.3690 2048 x 2048 1.4700 16X – 16Y Bildgröße Zeit [ms] 64 x 64 0.0044 128 x 128 0.0100 256 x 256 0.0270 512 x 512 0.0980 1024 x 1024 0.3800 2048 x 2048 1.5540

Global vs. Shared Global Memory (16X – 8Y) Shared Memory (16X – 8Y) Bildgröße Zeit [ms] 64 x 64 0.0129 128 x 128 0.0478 256 x 256 0.1897 512 x 512 0.7576 1024 x 1024 3.0500 2048 x 2048 12.2200 Shared Memory (16X – 8Y) Bildgröße Zeit [ms] 64 x 64 0.0044 128 x 128 0.0096 256 x 256 0.0260 512 x 512 0.0940 1024 x 1024 0.3690 2048 x 2048 1.4700

GPU vs. CPU Single Core (faui07g) : Intel Pentium 4 → 2.4 GHz Dual Core (faui08) : AMD Opteron → 2.2 GHz Quad Core (faui06i): Intel Q6600 → 2.4 GHz Device GFLOPS Single Core ~ 0.084 Dual Core ~ 0.384 Quad Core ~ 0.225 GPU ~ 22.78

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

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

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

Demo Sascha …

→ → ? →