01.07.12 GPGPU mit NVIDIA CUDA General-Purpose on Formatvorlagecomputing des Graphics Processing durch Units Untertitelmasters mit KlickenCompute bearbeiten NVIDIA Unified Device Architecture
Gliederung 01.07.12 Warum GPU? Architektur Programmieraufwand 1 (einfach) 2 (komplex) Alternativen MPI zu CUDA Funktionalität? 2/19
Warum GPU? 01.07.12 Quelle: NVIDIA CUDA C Programming Guide Aber: SIMD! 3/19
Architektur 01.07.12 (1) Architektur eines Kepler-GK110 Chips Quelle: NVIDIA Kepler GK110 Architecture Whitepaper 4/19
Architektur 01.07.12 (2) Quelle: NVIDIA Kepler GK110 Architecture Whitepaper, NVIDIA Fermi GF110 Architecture Whitepaper 5/19
Code 01.07.12 e Wie viel muss man wissen um sein Code auf der GPU laufen zu lassen? Grafik Programmierung wie OpenGL oder DirectX Nein Low Level Programmierung wie Assembler oder PTX Nein C/C++ Ja If you know C then you know CUDA After a short introduction Ansonsten gibt es auch Third Party Wrapper für Python, Perl, Fortran, Java, Ruby, Lua, Haskell, MATLAB, IDL, Mathematica Und sogar Webbasiert mit NCLab 6/19
01.07.121 Opening/Closing auf GPU: Implementierung von Erosion und Dilatation als Lösung für Parallel & Distributed Computing Praktikum (R. Moore) 7/19
01.07.121 Serieller CPU Code für die Erosion: 8/19
01.07.121 Paralleler GPU Code für die Erosion: 9/19
01.07.121 Aufruf des GPU Kernels: 10/19
01.07.121 Messwerte: CPU: Intel Xeon E5504 (8 Kerne irrelevant, nur einer wird benutzt) GPU: NVIDIA GeForce GTX 480 (480 Kerne) 500x667 + 16-faches Closing 333 500 Threads 1680x1050px + 64-faches Closing 1 764 000 Threads 10000x10000px + 256-faches Closing 100 000 000 Threads CPU GPU Gewinn 547 ms 2,8 ms x 190 12,1 sek 48,4 ms x 251 97 min 9,5 sek x 612 Maximale Anzahl der Threads für ein Kernel: (2³²-1) x (65536) x (65536) x (1024) = 18889465931478580854784 (Laut Dokumentation, ich habe es nicht ausprobiert) 11/19
01.07.122 Tracks Suche für den PANDA Detektor mit Hilfe von Hough-Transformation 12/19
01.07.122 Quelle: http://www.gsi.de/uploads/pics/fair-topologie.jpg 13/19
01.07.122 PANDA antiproton ANnihilation at DArmstadt Quelle: http://www-panda.gsi.de/framework/detector.php 14/19
01.07.122 Optimierungen: Speicheroptimierung Shared, Constant, Texture und deren Speicherzugriffe. Konfigurationsoptimierung Verteilung der Arbeit auf die einzelne SMs. Optimierung des Codes Loop unrolling, Reduktion des Registerverbrauchs. Reduktion der Verzweigungen Verzweigungen reduzieren die Parallelität! 15/19
01.07.122 Messwerte Hardware: - Intel Xeon - Nvidia GeForce GTX 480 ( 480 Kerne ) CPU GPU Improvement Occupancy time in ms time in ms x % 117138 489 240 startup() 0,25 0,011 23 2% N setorigin() clear Hough and Peaks c onforma landhough() findp e a k s InHoughS pa c e () 0,25 3 73 51 0,011 0,0393 0,7156 0,2332 23 76 102 219 25% 100% 25% 1 00% N N N N Cuda memset S ha re d, c ons ta nt S ha re d finddoublepointpeaksinhoughspace() collectpeaks() sortpeaks() 4 4 0,25 0,0643 0,0654 0,0549 62 61 5 100% 100% 2% N N N constant TODO? resetorigin() 0,25 0,011 23 25% N 22444 0,8863 25323 33% 1 N =Numbe r of points T ota l runtime for N = 335 (w ithout Z Ana lys is ) Oleksiy Rybalchenko c ountp oints C los e2012 T ot ra c k AndT ra c k Pa ra ms () Sommersemester 16/19 Runs Notes S ha re d, c ons ta nt
Alternativen 01.07.12 Portabilität Dokumentation Leistung Funktionalität Tools, Libraries???? DirectCompute CUDA Community Showcase 17/19
MPI 01.07.12 Kann CUDA MPI-ähnliche Funktionalität bieten? Ja: GPUDirect Quelle: http://developer.download.nvidia.com/assets/cuda/images/toolsscreenshots/rdma.png 18/19
Danke 01.07.12 Fragen? 19/19