CUDA. (Compute Unified Device Architecture) Thomas Trost. May 31 th 2016

Ähnliche Dokumente
Compute Unified Device Architecture CUDA

CUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg

Masterpraktikum Scientific Computing

Entwicklung algorithmischer Skelette für CUDA am Beispiel von Affintiy Propagation

Masterpraktikum Scientific Computing

General Purpose Computation on GPUs

Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern

Grundlagen von CUDA, Sprachtypische Elemente

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Architektur und Programmierung von Grafik- und Koprozessoren

CUDA by Example. Paralleles Rechnen auf der Grafikkarte. Leipzig, Paul Jähne SethosII

> High-Level Programmierung heterogener paralleler Systeme

Interaktive Globale Beleuchtung nach dem Antiradiance-Verfahren mittels der Open Computing Language (OpenCL)

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2018

GPGPU-Programmierung

Informatik - Übungsstunde

Modellierung und Simulation optischer Strahlführungen. Diplomarbeit Timon Bätz

OpenCL. Multi-Core Architectures and Programming (Seminar) Apelt, Nicolas / Zöllner, Christian

GPGPU-Programmierung

Rheinisch-Westfälische Technische Hochschule Aachen. Seminararbeit

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm. Einführung CUDA. Ralf Seidler. Friedrich-Alexander-Universität Erlangen-Nürnberg

Raytracing in GA mittels OpenACC. Michael Burger, M.Sc. FG Scientific Computing TU Darmstadt

Ferienakademie Erik Muttersbach

OpenCL. OpenCL. Boris Totev, Cornelius Knap

CUDA. Axel Jena, Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Axel Jena, Jürgen Pröll 1

Physikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs)

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck

High-Performance Computing mit FEMAG

Parallelisierungspotentiale mit CUDA-Streams 387

Einführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg

GPGPU-Programming. Constantin Timm Informatik 12 TU Dortmund 2012/04/09. technische universität dortmund. fakultät für informatik informatik 12

GPGPU mit NVIDIA CUDA

Gliederung. Problemstellung Motivation Multi-Agenten Simulation GPU Programmierung Stand der Technik Abgrenzung

Number of Maximal Partial Clones

CUDA Workshop. Ausblick. Daniel Tenbrinck

Stream Processing und High- Level GPGPU Sprachen

Woche 6. Cedric Tompkin. April 11, Cedric Tompkin Woche 6 April 11, / 29

OpenCL Implementierung von OpenCV Funktionen

Computergrafik Universität Osnabrück, Henning Wenke,

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr:

19. STL Container Programmieren / Algorithmen und Datenstrukturen 2

FPGA Beschleuniger. Your Name. Armin Jeyrani Mamegani Your Organization (Line #2)

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke,

Einführung in Python Teil II Bibliotheken für wissenschaftliches Rechnen

GPGPUs am Jülich Supercomputing Centre

Partitionierung von rechenintensiven Aufgaben zwischen FPGA und CPUs

Tag der Umweltmeteorologie Michael Kunz

Informatik für Mathematiker und Physiker Woche 6. David Sommer

Multi- und Many-Core

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Motivation (GP)GPU CUDA Zusammenfassung. CUDA und Python. Christian Wilms. Integriertes Seminar Projekt Bildverarbeitung

Projektseminar Mobilkommunikation Projektseminar MIKS

Programmierbeispiele und Implementierung. Name: Michel Steuwer

Gliederung. Was ist CUDA? CPU GPU/GPGPU CUDA Anwendungsbereiche Wirtschaftlichkeit Beispielvideo

TSM 5.2 Experiences Lothar Wollschläger Zentralinstitut für Angewandte Mathematik Forschungszentrum Jülich

Praktikum Entwicklung Mediensysteme (für Master)

Seminar GPU-Programmierung/Parallelverarbeitung

Paralleler Cuckoo-Filter. Seminar: Implementierungstechniken für Hauptspeicherdatenbanksysteme Jeremias Neth München, 21.

Proseminar. GPU-Computing Cuda vs. OpenCL. SS 2013 Alexander Stepanov

Beispielvortrag: HPCG auf Intel Haswell-EP

Untersuchung und Vorstellung moderner Grafikchiparchitekturen

Implementierung zweier Algorithmen mittels OpenCL auf Grafikkarten

technische universität dortmund Lehrstuhl für Hochfrequenztechnik Übertragungssysteme

Algorithms for graph visualization

Datenstrukturen und Algorithmen

Übungsstunde: Informatik 1 D-MAVT

Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick

Optimierungen der Lattice Boltzmann Methode auf x86-64 basierten Architekturen

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13

Numerik und Rechnen. Martin Heide & Dominik Holler. 12. Juni 2006

Programmierung von Graphikkarten

BVM-Tutorial 2010: BlueBerry A modular, cross-platform, C++ application framework

GPGPU Programming nvidia CUDA vs. AMD/ATI Stream Computing. Seminar HWS 08/09 by Erich Marth

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke,

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm Organiosatorisches. Tutorial CUDA. Ralf Seidler

vcdm im Wandel Vorstellung des neuen User Interfaces und Austausch zur Funktionalität V

Universität Karlsruhe (TH)

Volumenrendering mit CUDA

Machine Learning. von Nico Hezel

GPUs. Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

Programmier-Befehle - Woche 09

auf differentiellen Leitungen

Introduction Workshop 11th 12th November 2013

Computer-gestützter Entwurf von absatzweise arbeitenden chemischen Mehrproduktanlagen

PRIP-Preis. Effizientes Object Tracking durch Programmierung von Mehrkernprozessoren und Grafikkarten

Eingebettete Taktübertragung auf Speicherbussen

GPGPU Basiskonzepte. von Marc Kirchhoff GPGPU Basiskonzepte 1

Blockseminar: Verteiltes Rechnen und Parallelprogrammierung. Sommer Semester Tim Conrad

Eine kurze Geschichte der Grafikkarten

Karlsruhe Institute of Technology Die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)

Datenstrukturen. Ziele

Enblend - Portierung auf die GPU

EVANGELISCHES GESANGBUCH: AUSGABE FUR DIE EVANGELISCH-LUTHERISCHE LANDESKIRCHE SACHSEN. BLAU (GERMAN EDITION) FROM EVANGELISCHE VERLAGSAN

High-level software transformations

Parallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff

Transkript:

CUDA (Compute Unified Device Architecture) Thomas Trost May 31 th 2016

Introduction and Overview platform and API for parallel computing on GPUs by NVIDIA relatively straightforward general purpose use of GPUs developed and maintained by NVIDIA around since 2007 and still rapidly changing (current version: 7.5) extension to languages like C, C++, Fortran freeware a number of clusters is equipped with NVIDIA GPUs alternative: OpenCL Thomas Trost CUDA 2016/05/31 1 / 10

Performance: Operations per Time Thomas Trost CUDA 2016/05/31 2 / 10

Performance: Memory Bandwidth Thomas Trost CUDA 2016/05/31 3 / 10

Di erence between CPUs and GPUs Thomas Trost CUDA 2016/05/31 4 / 10

Basics host (CPU + memory) CUDA API device (GPU + memory) Typical programming pattern: 1 initialize data on host 2 copy data from host to device 3 invoke kernel on device for processing data 4 copy data from device to host 5 output of data from host Thomas Trost CUDA 2016/05/31 5 / 10

CUDA API Get number of available devices: cudagetdevicecount(int *count) Tell program to use particular device: cudasetdevice(int device) Copy data between host and device and between di erent devices: cudamemcpy(void *dest, const void *source, size t count, enum cudamemcpykind kind) Thomas Trost CUDA 2016/05/31 6 / 10

Kernel Execute same code many times, organized as follows: In the program: kernelname<<<dimgrid, dimblocks>>>(args) Thomas Trost CUDA 2016/05/31 7 / 10

Memory Hierarchy on Device Thomas Trost CUDA 2016/05/31 8 / 10

Pros and Cons Pros: de facto standard well-documented active community good coverage of platforms and languages many libraries Cons: monopoly of NVIDIA rapidly changing standard specific (expensive) hardware required di cult and costly to write really e cient code Thomas Trost CUDA 2016/05/31 9 / 10

Source and Further Reading http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html Thomas Trost CUDA 2016/05/31 10 / 10

Ruhr-Universität Bochum 31.05.2016

Warum Libraries? Oftmals werden Standard-Operationen benötigt CUDA-Code optimieren ist aufwendig! Libraries nehmen die Arbeit ab Beispiele Sortieren, Matrix-Multiplikation, FFT, Eigenwerte...

Welche Libraries? Thrust Diverse Datenstrukturen und Funktionen für GPU cufft Schnelle Fourier-Transformation für GPU

Thrust - Einleitung Datenstrukturen und Algorithmen für parallelisiertes Rechnen auf GPU STL-artige Struktur Zwei Kernbereiche: Datenstrukturen thrust::device vector thrust::host vector thrust::device ptr... Algorithmen thrust::sort thrust::reduce thrust::exclusive scan...

Thrust - Container Vereinfachung von häufigen Operationen Verzicht auf cudamalloc, cudamemcpy, cudafree, etc. Kompatibel mit STL-Datenstrukturen Beispiel: 1 // list container on host 2 std::list<int> h_list; 3 h_list.push_back(13); 4 h_list.push_back(37); 5 // copy list to device vector 6 thrust::device_vector <int> d_vec(h_list.size()); 7 thrust::copy(h_list.begin(), h_list.end(), d_vec.begin()); 8 // alternative method 9 thrust::device_vector <int> d_vec(h_list.begin(), h_list.end()); 10 //print elements from device vector 11 for ( auto elem : d_vec) 12 std::cout << elem << std::endl;

Thrust - Algorithmen Viele Standard-Algorithmen: Transformationen Reduktionen Präfixsumme Sortieren Templatisiert zur Verwendung beliebiger Datentypen Benutzerdefinierte Operationen möglich 1 // declare storage 2 device_vector <int> i_vec =... 3 device_vector <float > f_vec =... 4 // sum of integers ( equivalent calls) 5 reduce(i_vec.begin(), i_vec.end()); 6 reduce(i_vec.begin(), i_vec.end(), 0, plus<int >()); 7 // sum of floats ( equivalent calls) 8 reduce(f_vec.begin(), f_vec.end()); 9 reduce(f_vec.begin(), f_vec.end(), 0.0f, plus<float >()); 10 // maximum of integers 11 reduce(i_vec.begin(), i_vec.end(), 0, maximum <int >());

Thrust - Performance

cufft - Einleitung Optimierte FFT auf der GPU 1D, 2D und 3D Transformationen Reelle und Komplexe Datentypen Single und Double Precision In-place und out-of-place Thread-safe Interface ähnlich zu FFTW

cufft - Benutzung Ausführung von FFTs basiert auf Plan Vor der Ausführung muss ein Plan erstellt werden Plan enthält Informationen über Art der Transformation (Auflösung, Datentyp, Hardware, etc.) Anhand des Plans wird der Algorithmus optimiert Ein Plan kann für mehrere FFTs genutzt werden Optimierung muss nur einmal zu beginn erfolgen

cufft - Beispiel 1 # define NX 64 2 # define NY 64 3 # define NZ 128 4 5 cuffthandle plan; 6 cufftcomplex *data1, *data2; 7 cudamalloc((void**)&data1, sizeof(cufftcomplex)*nx*ny*nz); 8 cudamalloc((void**)&data2, sizeof(cufftcomplex)*nx*ny*nz); 9 /* Create a 3D FFT plan. */ 10 cufftplan3d(&plan, NX, NY, NZ, CUFFT_C2C); 11 12 /* Transform the first signal in place. */ 13 cufftexecc2c(plan, data1, data1, CUFFT_FORWARD); 14 15 /* Transform the second signal using the same plan. */ 16 cufftexecc2c(plan, data2, data2, CUFFT_FORWARD); 17 18 /* Destroy the cufft plan. */ 19 cufftdestroy(plan); 20 cudafree(data1); cudafree(data2);

cufft - Weiter Möglichkeiten Callback routinen Ermöglichen Ausführung von Code nach jeder FFT Angepasstes Speicherlayout Asynchrone Transfomationen meherer FFTs FFTs mit mehreren GPUs

Weitere Libraries cusolver - Lösen von linearen Gleichungssystemen cusparse - Lineare Algebra für dünnbesetzte Matrizen cublas - Lineare Algebra Routinen curand - Pseudo Zufallszahlen CUDA Math Library - Diverse mathematische Funktionen etc.