Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Ein Vortrag von Simon Bayer

Ähnliche Präsentationen


Präsentation zum Thema: "Ein Vortrag von Simon Bayer"—  Präsentation transkript:

1 Ein Vortrag von Simon Bayer
CUDA Ein Vortrag von Simon Bayer

2 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

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

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

5 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

6 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

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

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

9 Parallelität -> GPU ≠ CPU
Computer haben CPUs mit ca 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

10 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.

11 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.

12 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

13 Wichtig: Speicherarten

14 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

15 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

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

17 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

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

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

20 Beispiel: FindClosest
CUDA: auch gezeigt und veranschaulicht

21 Quellen Für diesen Vortrag: Bilder (beide bearbeitet): Rest siehe Quellenverzeichnis (http://cadoiz.square7.ch/CUDA/Quellen.pdf)

22 Vielen Dank Für Eure Aufmerksamkeit


Herunterladen ppt "Ein Vortrag von Simon Bayer"

Ähnliche Präsentationen


Google-Anzeigen