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

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

Compute Unified Device Architecture CUDA

Grundlagen von CUDA, Sprachtypische Elemente

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr:

GPGPU-Programmierung

GPGPU-Programmierung

Programmierbeispiele und Implementierung. Name: Michel Steuwer

Masterpraktikum Scientific Computing

Eine kurze Geschichte der Grafikkarten

Masterpraktikum Scientific Computing

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

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

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

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

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

Wie man heute die Liebe fürs Leben findet

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

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

Ein Stern in dunkler Nacht Die schoensten Weihnachtsgeschichten. Click here if your download doesn"t start automatically

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

Die "Badstuben" im Fuggerhaus zu Augsburg

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

Programmierung von Graphikkarten

Handbuch der therapeutischen Seelsorge: Die Seelsorge-Praxis / Gesprächsführung in der Seelsorge (German Edition)

Magic Figures. We note that in the example magic square the numbers 1 9 are used. All three rows (columns) have equal sum, called the magic number.

Parallelisierung auf CUDA

Weather forecast in Accra

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

PONS DIE DREI??? FRAGEZEICHEN, ARCTIC ADVENTURE: ENGLISCH LERNEN MIT JUSTUS, PETER UND BOB

Wer bin ich - und wenn ja wie viele?: Eine philosophische Reise. Click here if your download doesn"t start automatically

Die UN-Kinderrechtskonvention. Darstellung der Bedeutung (German Edition)

Fußballtraining für jeden Tag: Die 365 besten Übungen (German Edition)

Was heißt Denken?: Vorlesung Wintersemester 1951/52. [Was bedeutet das alles?] (Reclams Universal-Bibliothek) (German Edition)

Rheinisch-Westfälische Technische Hochschule Aachen. Seminararbeit

GPU Architektur CUDA - OpenCL

Killy Literaturlexikon: Autoren Und Werke Des Deutschsprachigen Kulturraumes 2., Vollstandig Uberarbeitete Auflage (German Edition)

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

Die einfachste Diät der Welt: Das Plus-Minus- Prinzip (GU Reihe Einzeltitel)

42 Zitate großer Philosophen: Über das Leben, das Universum und den ganzen Rest (German Edition)

PONS DIE DREI??? FRAGEZEICHEN, ARCTIC ADVENTURE: ENGLISCH LERNEN MIT JUSTUS, PETER UND BOB

Web-Apps mit jquery Mobile: Mobile Multiplattform-Entwicklung mit HTML5 und JavaScript (German Edition)

Der Topos Mütterlichkeit am Beispiel Bertolt Brechts "Der kaukasische Kreidekreis" und "Mutter Courage und ihre Kinder" (German Edition)

Max und Moritz: Eine Bubengeschichte in Sieben Streichen (German Edition)

Konkret - der Ratgeber: Die besten Tipps zu Internet, Handy und Co. (German Edition)

Im Zeichen der Sonne: Schamanische Heilrituale (German Edition)

Die gesunde Schilddrüse: Was Sie unbedingt wissen sollten über Gewichtsprobleme, Depressionen, Haarausfall und andere Beschwerden (German Edition)

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

Parallele Programmierung mit GPUs

Microsoft Outlook Das Handbuch (German Edition)

General Purpose Computation on GPUs

Accelerating Information Technology Innovation

E.T.A. Hoffmann: Kindermärchen - "Nussknacker und Mausekönig": Abhandlung einer These (German Edition)

Pressglas-Korrespondenz

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

Jägersprache, Wildkunde und Begriffe aus der Jagd: Schwerpunkt Jägerprüfung Rotwild, Rehwild, Gamswild, Steinwild, Muffelwild (German Edition)

Volumenrendering mit CUDA

Flow - der Weg zum Glück: Der Entdecker des Flow-Prinzips erklärt seine Lebensphilosophie (HERDER spektrum) (German Edition)

Mein Haus energetisch sanieren: Komfort verbessern, Kosten senken, Klima schützen (German Edition)

Informatik - Übungsstunde

Im Fluss der Zeit: Gedanken beim Älterwerden (HERDER spektrum) (German Edition)

Funktion der Mindestreserve im Bezug auf die Schlüsselzinssätze der EZB (German Edition)

Sinn und Aufgabe eines Wissenschaftlers: Textvergleich zweier klassischer Autoren (German Edition)

Privatverkauf von Immobilien - Erfolgreich ohne Makler (German Edition)

Tschernobyl: Auswirkungen des Reaktorunfalls auf die Bundesrepublik Deutschland und die DDR (German Edition)

Duell auf offener Straße: Wenn sich Hunde an der Leine aggressiv verhalten (Cadmos Hundebuch) (German Edition)

Die besten Chuck Norris Witze: Alle Fakten über den härtesten Mann der Welt (German Edition)

VGM. VGM information. HAMBURG SÜD VGM WEB PORTAL USER GUIDE June 2016

Warum nehme ich nicht ab?: Die 100 größten Irrtümer über Essen, Schlanksein und Diäten - Der Bestseller jetzt neu!

FEBE Die Frontend-Backend-Lösung für Excel

Ermittlung des Maschinenstundensatzes (Unterweisung Industriekaufmann / -kauffrau) (German Edition)

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

Willy Pastor. Click here if your download doesn"t start automatically

Reparaturen kompakt - Küche + Bad: Waschbecken, Fliesen, Spüle, Armaturen, Dunstabzugshaube... (German Edition)

Weihnachten anno Domini 2014: Geschichten, Sprüche und anderes (German Edition)

GPGPU WITH OPENCL. Praktikum Parallele Rechnerarchitekturen, 2015w Franz Richter-Gottfried

Pensionskasse: Vorsorge, Finanzierung, Sicherheit, Leistung (German Edition)

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

Privatverkauf von Immobilien - Erfolgreich ohne Makler (German Edition)

Nürnberg und der Christkindlesmarkt: Ein erlebnisreicher Tag in Nürnberg (German Edition)

Socken stricken mit nur 2 Stricknadeln: Vier verschiedene Techniken (German Edition)

Selbstbild vs. Fremdbild. Selbst- und Fremdwahrnehmung des Individuums (German Edition)

Der Pharao und die Götter: Fünf Ägypten Romane (German Edition)

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

Die einfachste Diät der Welt: Das Plus-Minus- Prinzip (GU Reihe Einzeltitel)

Robert Kopf. Click here if your download doesn"t start automatically

Aus FanLiebe zu Tokio Hotel: von Fans fã¼r Fans und ihre Band

Soziale Arbeit mit rechten Jugendcliquen: Grundlagen zur Konzeptentwicklung (German Edition)

Sagen und Geschichten aus dem oberen Flöhatal im Erzgebirge: Pfaffroda - Neuhausen - Olbernhau - Seiffen (German Edition)

Fachübersetzen - Ein Lehrbuch für Theorie und Praxis

C++ kurz & gut (German Edition)

Ferienakademie Erik Muttersbach

Wirtschaftskrise ohne Ende?: US-Immobilienkrise Globale Finanzkrise Europäische Schuldenkrise (German Edition)

Analyse und Interpretation der Kurzgeschichte "Die Tochter" von Peter Bichsel mit Unterrichtsentwurf für eine 10. Klassenstufe (German Edition)

Mercedes OM 636: Handbuch und Ersatzteilkatalog (German Edition)

Geboren im Zeichen der Jungfrau: Was das Sternzeichen über den Menschen verrät (German Edition)

Transkript:

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

Warum? 2

Aufbau CPU geringe Latenz große Zwischenspeicher besser für serielle Ausführung GPU hohe Rechenleistung hohe Bandbreite besser für parallele Ausführung 3

Was ist CUDA? Compute Unified Device Architecture API zur Programmierung von Nvidia GPUs C/C++ zum Einstieg: http://docs.nvidia.com/cuda/index.html https://developer.nvidia.com/cuda-downloads 4

Hello World #include <stdio.h> global void greet() { printf("hello World!\n"); } int main(){ greet<<<1, 1>>>(); cudadevicereset(); return 0; } Kompilierung: nvcc hello_world.cu -o hello_world 5

Ausführungsmodell 6

#include <stdio.h> Paralleles Hello World global void greet() { printf("thread %d von %d\n", blockidx.x * blockdim.x + threadidx.x + 1, blockdim.x * griddim.x); } int main(){ greet<<<2, 2>>>(); cudadevicereset(); return 0; } 7

Speichermodell 8

Genereller Programmablauf 1. Ressourcen anfordern 2. Daten zur GPU kopieren 3. Kernel aufrufen/berechnungen ausführen 4. Ergebnisse zurückkopieren 5. Ressourcen freigeben CUDA 6.0 Unified Memory 9

Beispielcode CUDA 6.0 int main() { // declare pointer int* a; // allocate memory on GPU and CPU cudamanagedmalloc((void**) &a, SIZE); // fill a with data on host... // kernel invocation kernel<<<nblocks, NTHREADS>>>(a); // do somethng with a on host... // clean up cudafree(a); } return 0: 10

Matrixmultiplikation C ij = k A ik B kj 11

Ablauf 12

CPU-Code void matmul(double *a, double *b, double *c, int dim) { for (int i = 0; i < dim; i++) { for (int j = 0; j < dim; j++) { double sum = 0; for (int k = 0; k < dimension; k++) { sum += a[i * dim + k] * b[k * dim + j]; } c[i * dim + j] = sum } } } 13

GPU-Hostcode // allocate memory on GPU cudamalloc((void**) &d_a, dim * dim * sizeof(double)); cudamalloc((void**) &d_b, dim * dim * sizeof(double)); cudamalloc((void**) &d_c, dim * dim * sizeof(double)); // copy data to the GPU cudamemcpy(d_a, a, dim * dim * sizeof(double), cudamemcpyhosttodevice); cudamemcpy(d_b, b, dim * dim * sizeof(double), cudamemcpyhosttodevice); // kernel invocation kernel<<<nblocks, NTHREADS>>>(d_a, d_b, d_c, dim); // copy result back to the CPU cudamemcpy(c, d_c, cx * cy * sizeof(double), cudamemcpydevicetohost); // clean up cudafree(d_a); cudafree(d_b); cudafree(d_c); 14

GPU-Devicecode global void kernel( double *d_a, double *d_b, double *d_c, int dim) { int x = blockidx.x * blockdim.x + threadidx.x; int y = blockidx.y * blockdim.y + threadidx.y; if (x < dim && y < dim) { double sum = 0; for (int i = 0; i < dim; i++) { sum += d_a[x * dim + i] * d_b[i * dim + y]; } d_c[x * dim + y] = sum; } } 15

cudaevent_t custart, custop; cudaeventcreate(&custart); cudaeventcreate(&custop); cudaeventrecord(custart, 0); // code to measure Zeitmessung cudaeventrecord(custop, 0); cudaeventsynchronize(custop); cudaeventelapsedtime(&cuelapsedtime, custart,custop); cudaeventdestroy(custart); cudaeventdestroy(custop); 16

Messergebnis Tesla K20, doppelte Genauigkeit erwartet: 1,2 Tflop/s gemessen: 8 Gflop/s :( 17

Alles nur Marketing? 1, 2 10 12 flop/s dafür werden die Daten benötigt hier fused-multiply-add (FMA): c + = a b dreimal laden, einmal schreiben für zwei Rechenoperationen 4 8 Byte = 32 Byte für zwei Rechenoperation 1, 2 10 12 16 Byte = 19, 2 TB/s Speicherbandbreite benötigt 145 GB/s Speicherbandbreite verfügbar 18

Speicherbandbreite ist die Beschränkung Optimierungen: caching, loop unrolling,... notwendig für performanten Code verschlechtern die Lesbarkeit des Programmcodes Was bringt Shared Memory? 19

Idee 20

GPU-Devicecode global void kernelshared(double *a, double *b, double *c, int dim) { shared double as[32][32]; shared double bs[32][32]; int x = blockidx.x * blockdim.x + threadidx.x; int y = blockidx.y * blockdim.y + threadidx.y; int xdim = x * dim; int blocks = dim / 32; double sum = 0; for (int m = 0; m < blocks; m++) { int m32 = m * 32; as[threadidx.x][threadidx.y] = a[xdim + (m32 + threadidx.y)]; bs[threadidx.x][threadidx.y] = b[(m32 +threadidx.x) * dim + y]; syncthreads(); } for (int i = 0; i < 32; i++) { sum += as[threadidx.x][i] * bs[i][threadidx.y]; } syncthreads(); } c[xdim + y] = sum; 21

Messergebnis Tesla K20, doppelte Genauigkeit erwartet: 1,2 Tflop/s gemessen: 160 Gflop/s : 22

Alternative: optimierte Bibliotheken Bibliothek Anwendungsgebiet cublas Matrix-/Vektorberechnungen cusparse sparse Matrix-/Vektorberechnungen cufft Fast-Fourier-Transformation curand Zufallszahlengenerierung cudnn Neuronale Netzwerke cusolver Gleichungssysteme Thrust Standard-Template-Library für CUDA und viele andere: https://developer.nvidia.com/gpu-accelerated-libraries 23

Matrixmultiplikation mit cublas // allocate memory on GPU... // copy data to the GPU... // initialize cublas cublashandle_t cublashandle; cublascreate(&cublashandle); // call the library function cublasdgemm(cublashandle, CUBLAS_OP_N, CUBLAS_OP_N, dim, dim, dim, 1, d_a, dim, d_b, dim, 0, d_c, dim); // copy result back to the CPU... // clean up cublasdestroy(cublashandle);... cublas berechnet: C = α op(a) op(b) + β C 24

Messergebnis Tesla K20, doppelte Genauigkeit erwartet: 1,2 Tflop/s gemessen: 1 Tflop/s :) 25

Anmerkungen zum Beispiel Auslastung der GPU ab Matrixdimension > 1000 gut parallelisierbares Beispiel sehr einfaches Beispiel niemand multipliziert den ganzen Tag Matrizen 26

Was eignet sich für GPGPU? Datenparallelität wenig Verzweigung große Problemgrößen hochgradig parallele Probleme je mehr arithmetische Operationen, desto besser Einschränkung durch GPU-Speichergröße 27

Quellen http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html CUDA by example (2010) The CUDA handbook (2013) 28

Anwendungen Hashkollisionen 29

. Charlie soll ein Gutachten K verfassen und an Bob senden.. Alice soll K durch digitale Unterschrift beglaubigen.. Alice unterschreibt mit E A (M(K)) und sendet das Ergebnis an Bob.. In Wirklichkeit sendet Charlie zwei verschiedene Gutachten K und K, wobei M(K) = M(K ).. Bob glaubt, dass Alice K unterschrieben hat, Alice hat aber K unterschrieben Umsetzung in CUDA mit 32-Bit Streufunktion basierend auf SHA-256 30

Ablauf K berechnen K berechnen K und K auf Kollision prüfen 31

Umsetzung 1. 2 16 Threads 2. t Threads 1. t berechnet ein k K und schreibt in gemeinsamen Speicher 2. globale Synchronisation 3. t berechnet ein k K 4. Block K 1. Threadgruppe lädt Block von K 2. lokale Synchonisation 3. Thread vergleicht Block mit seinem k 4. bei Kollision werden k und k gemerkt 5. lokale Synchonisation 3. zum Schluss Ausgabe aller Texte zu den gefundenen Kollisionen https://github.com/sethosii/birthday-attack 32

Ergebnis This birthday attack took 165.8 ms. Collisions found: 2 33

Collision with good text #17470 and bad text #21144 Good plaintext: Linux is awesome! It is build on top of reliable Software like X11. Also there are several projects within the Linux community which have mostly the same objective like Wayland and Mir - and that's great. Why shouldn't you? Duplicate work is no problem. And with different approaches you will propably find better solutions. Thanks to the many projects you can choose what suits you best. The next Bad plaintext: Linux sucks! It is build on top of very old Software like X11 which makes them hard to maintain. Also there are several projects within the Linux community which have mostly identical aim like Wayland and Mir. Therefore there is duplicate work. This shows how divided the community is. The next point are the codenames. They suck. What should Trusty Thar stand for? Also the whole development Hash value of both is: 640cb7c7 34

Collision with good text #51660 and bad text #26306 Good plaintext: Linux is awesome! It is build on top of reliable Software like X11. Also there are several projects within the Linux community which have mostly identical aim like Wayland and Mir - and that's great. Why shouldn't you? Duplicate work is no problem. And with more approaches you will propably find better solutions. Because of the many projects you can choose what fits you best. The next point are the Bad plaintext: Linux sucks! It is build on top of very old Software like X11 which makes them difficult to maintain. Also there are several projects within the Linux community which have mostly identical aim like Wayland and Mir. Because of such things there is a duplication of effort. This shows how divided the community is. The next point are the code names. They suck. What should Trusty Thar stand for? Also the Hash value of both is: 91ada029 35