Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

CUDA Ein Vortrag von Simon Bayer 1. 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.

Ähnliche Präsentationen


Präsentation zum Thema: "CUDA Ein Vortrag von Simon Bayer 1. 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."—  Präsentation transkript:

1 CUDA Ein Vortrag von Simon Bayer 1

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 2

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 3

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

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 5

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 6

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

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

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 9

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

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

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 12

13 Wichtig: Speicherarten 13

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 14

15 Race conditions vs _ _syncthreads() __shared__ int I; i = 0; __syncthreads() if(thread.Idx.x == 0) ++i; __syncthreads() if(thread.Idx.x ==1) ++i; 15 __global__ void SomeKernel () { __shared__ int i; i = thread.Idx.x; } _ _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 16

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 17

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

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

20 Beispiel: FindClosest CUDA: auch gezeigt und veranschaulicht 20

21 Quellen Für diesen Vortrag: Bilder (beide bearbeitet): content/uploads/2013/05/nvidia-logo.jpg nvidia.jpg Rest siehe Quellenverzeichnis (http://cadoiz.square7.ch/CUDA/Quellen.pdf) 21

22 Vielen Dank Für Eure Aufmerksamkeit 22


Herunterladen ppt "CUDA Ein Vortrag von Simon Bayer 1. 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."

Ähnliche Präsentationen


Google-Anzeigen