Ein Vortrag von Simon Bayer

Slides:



Advertisements
Ähnliche Präsentationen
Übersicht Anzeigegeräte Framebuffer Grundlagen 3D Computergrafik
Advertisements

Matrixmultiplikation
Kurzpräsentation, FundraisingCamp ( )
< CUDA implementation>
Constantin Timm Informatik 12 TU Dortmund
PC-Cluster.
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
Puck eine visuelle Programmiersprache für die Schule
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Einführung in Berechenbarkeit und Formale Sprachen
Name des Vortragenden Klasse Ort / tt.mm.jjjj Beschreibung Zentraleinheit CPU, Motherbord, RAM.
Name des Vortragenden Klasse Ort / tt.mm.jjjj Beschreibung Zentraleinheit CPU, Motherbord, RAM.
Name des Vortragenden Klasse Ort / tt.mm.jjjj Beschreibung Zentraleinheit CPU, Motherbord, RAM.
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Seminar parallele Programmierung SS 2003
OpenMP Präsentation im Rahmen des Seminars
Studiengang Informatik FHDW
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Vorlesung 2 Rechnerarchitektur Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Vorlesung 3: Verschiedenes Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Rechnerarchitektur Vorlesung 2 Peter B. Ladkin
Brandenburgische Technische Universität Cottbus Program Profiling Andrzej Filipiak Übung Testen von Software SoSe 2006.
Vortrag III Hier in der Vorlesungszeit! Anwesenheitspflicht Jede Gruppe hat 6 Minuten! Stellt eure GUI vor –was ihr besonderes gemacht habt –Spektakuläre.
Schnittstellen in der Bildverarbeitung
Open Source Prozessor Leon2 Peer Royla und Marco Siebert RST-Labor WS 04/05 Prof. Dr.-Ing. Thomas Risse.
Random Heightmap on GPU
Matrix Multiplication on CUDA
< Best practices >
1 Vorlesung 3 Verschiedenes Peter B. Ladkin
Beschleunigung Virtueller Privater Netze durch Netzwerkprozessoren
Leitfaden Motivation Was ist CUDA ? NVIDIA Grafikkarte Programmierung
Grafikkarten.
Name des Vortragenden Klasse Ort / tt.mm.jjjj Beschreibung Zentraleinheit CPU, Motherbord, RAM.
Aufbau und Funktionsweise
Clustering mittels Grafikprozessor
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Die Finalisten für den Advanced Encryption Standard Advanced Encryption Standard Herbert Frohner Sebastian Hegenbart Joachim Kerschbaumer.
Nutzungsszenarien introspektiver Modelle
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
- Organisatorisches: Termine
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Quantum Computing Hartmut Klauck Universität Frankfurt WS 04/
Der Wert des Wassers? Eine ökonomische und ökologische Betrachtung
GPU Computing Burim Kameri Fachhochschule Hannover (FHH)
GPU Computing Burim Kameri Fachhochschule Hannover (FHH)
Einführung in die Programmierung
Parallel Matrix Multiplication
Parallel Programming Parallel Matrix Multiplication
3.4 CPU-Chips und Busse CPU-Chips
Algorithm Engineering „GPU Algorithmen“
Ram/Rom/EPRom Abb. 3 Abb. 3 Abb. 2 Ein Referat von Xaver Schweitzer.
2.4 Rekursion Klassifikation und Beispiele
Determinanten und Cramer‘sche Regel
Multiprozessoren: Herausforderung für die Software
0 Univ. Paderborn, FG Theoretische Elektrotechnik 0 Übersicht Motivation und Zielsetzung Grundlagen Funktionsprinzip einer Grafikarter.
JOMP
Parallele Programmierung mit Java, SS 2001 Spar/Timber - Programmiersprache und Compiler für high-performance Berechnungen Technische Universität München.
Parallelisierung für Multiprozessor-Maschinen
Central Processing Unit von David Kleuker und Thomas Auner
Migration der HLA aus militärischen in zivile Domänen Steffen Straßburger, Uni MD Übersicht Die Vergangenheit Die Gegenwart Die Zukunft (?)
Software Engineering SS04 Paralleles Programmieren FH Aachen, Prof. Dr.-Ing. Michael Trautwein Andrej Kühnal, Perez-Otuno Rodrigo.
PhysX auf der GPU in Batman: Arkham Asylum & bei Fluid Simulations Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung Softwaretechnologie.
Wissenschaftliches Programmieren „CUDA“ Achim Grolms Buyu Xiao Guanhua Bai Betreuer: Dipl.-Ing. Bastian Bandlow.
Aachen, Seminarvortrag Von: Lukas Abels-Vehns OpenCL mit Aparapi.
RAID-Systeme - Standards - Leistungsmerkmal - Redundanz - Datensicherheit eine Präsentation von Jochen Throm an der Berufsakademie Mosbach.
Vergleich der Frameworks OpenCL und CUDA zur GPGPU- gestützten Datenverarbeitung Leonid Kostrykin Matr.Nr.: Lehrstuhl.
Blowfish mit CUDA Dominik Oepen Inhalt ● Blowfish Grundlagen ● Implementierungsdetails ● Performance ● Fazit.
 Präsentation transkript:

Ein Vortrag von Simon Bayer CUDA Ein Vortrag von Simon Bayer

Gliederung Gliederung (Teil 1) 1. Einleitung 2. CUDA C 3. Parallelität 3.1. GPU ≠ CPU 3.2. Parallelität bei CUDA 3.3. Umwandlung von seriellem CPU- Code in stark parallelen CUDA C-Code

Gliederung 3.3. Umwandlung von seriellem CPU- Code in stark parallelen CUDA C-Code 3.3.1. „embarrassingly parallel algorithms“ 3.3.2. Begriffsklärungen: Die verschiedenen Speicher 3.3.3. Die Nutzung des Shared Memory 3.3.4. Vermeiden von Wettbewerbssituationen und „__syncthreads()“ 3.3.5. Tiling / Blocking

Gliederung 4. API 5. Beispiele 5.1. FindClosestPoint Brute Force 5.2. Beschleunigung 1 5.3. Beschleunigung 2

Einführung CUDA = Compute Unified Device Architecture Schnittstelle von Nvidia für GPGPU seit Nov 06 Voraussetzung: hohe Parallelisierbarkeit z.B. gegeben bei technischen Simulationen bei Wirtschaftsvorhersagen und vielem mehr

CUDA C CUDA C: erste Sprache speziell von GPU-Hersteller für GPGPU-Programmierung Sehr ähnlich zum Standard C => einfachere Rezeption Lediglich ein paar notwendige Schlüsselwörter Achtung: kein volles Standard C Typische Struktur: Programm teils auf CPU, teils auf GPU

CUDA C Hohe Datenparallelität => GPU Serielle Teile => CPU  Nutzen beider Stärken Schlüsselwörter: _ _host_ _ _ _global_ _ _ _device_ _ Aufteilung auf der GPU: Blöcke und Threads (Tafel) Übergabe an Kernelfunktion in <<<…>>> z.B. hostFunc<<<1,1>>>

CUDA C Blöcke beinhalten Warps, Warps beinhalten 32 Threads -> (Tafel) Entwicklung mit dem von Nvidia spezialisierten Eclipse Nsight unter openSUSE 12.2 -> gezeigt

Parallelität -> GPU ≠ CPU Computer haben CPUs mit ca. 2-12 Kernen und eine Taktung von meist mehreren GHz => hervorragend bei seriellem Code ABER: Physikalische Grenze bei etwa 4GHz! GPUs haben zwischen 8 und 480 Kernen und eine Taktung von mehreren hundert MHz => eher schlecht bei seriellem Code => dafür stark bei parallelisierbaren Algorithmen

Parallelität bei CUDA Zur Veranschaulichung: Pro Multiprozessor* 16 Blöcke à 1024 Threads zuweisbar, bis zu 2^32-1 Blöcke insgesamt => Auf der eher preiswerten GT 440 etwa 67 Millionen Threads! Unterschied zw. GPU und CPU-Threads.

Parallelität bei CUDA: Organisierung Thread-IDs in Blöcken und Block-IDs im Gitter -> Tafel Performance-Unterschiede primär wegen unterschiedlicher Anzahl an Blöcken pro SM Die Restlichen Konfigurationen sind eher starr.

Umwandlung von seriell nach parallel Realistischer Fall: Algorithmus und serielle Variante vorhanden => beschleunigen „embarrassingly parallel algorithms“ -> viele von einander unabhängige Iterationen -> Beispiel: Matrixmultiplikation -> nicht zwangsläufig einfach Stichwort SIMD - Datenparallelität

Wichtig: Speicherarten

Genauer: Shared Memory Effizientes Teilen von Inhalten innerhalb eines Thread-Blocks „Shared“ von geteilt -> einer pro Block Essenziell für Tiling / Blocking (später) Im L1-Cache -> ausgesprochen schnell Local Memory und Shared Memory „teilen sich“ dem L1 -> konfigurierbar

Race conditions vs _ _syncthreads() __global__ void SomeKernel () { __shared__ int i; i = thread.Idx.x; } __shared__ int I; i = 0; __syncthreads() if(thread.Idx.x == 0) ++i; if(thread.Idx.x ==1) ++i; _ _syncthreads() = seriell Immer wenn nötig So wenig wie möglich

Tiling / Blocking Geschwindigkeit: Shared Memory > Global Memory * 100 !!! => Block aus Global Memory laden und Elemente aus Block aus Shared Memory ansprechen -> Tafel

API Schnittstelle zur Anwendungsprogrammierung CUDA Runtime API => enge Korrespondenz zur Hardware und nicht über Umwege* wie vorher Weitere „Utility“-Bibiotheken (CUDA Libraries) wie z.B. die CUDA Math API

Beispiel: FindClosest Veranschaulichung in 2D Ergebnis hier: i[0] = 2 i[1] = 2 i[2] = 1 1 2

Beispiel: FindClosest 3D in Intuitivem Java-Code (gezeigt)

Beispiel: FindClosest CUDA: auch gezeigt und veranschaulicht

Quellen Für diesen Vortrag: Bilder (beide bearbeitet): http://www.ng4a.com/wp-content/uploads/2013/05/nvidia-logo.jpg http://www.hennek-homepage.de/video/CUDA-nvidia.jpg Rest siehe Quellenverzeichnis (http://cadoiz.square7.ch/CUDA/Quellen.pdf)

Vielen Dank Für Eure Aufmerksamkeit