Parallelisierung der Matrixmultiplikation
|
|
- Sofie Winter
- vor 7 Jahren
- Abrufe
Transkript
1 Ein Beispiel für parallele Algorithmen Ivo Hedtke ehem. Hiwi am Lehrstuhl für Wissenschaftliches Rechnen (Prof. Dr. Zumbusch) Institut für Angewandte Mathematik Fakultät für Mathematik und Informatik Friedrich-Schiller-Universität Jena Gastvortrag im Seminar Wissenschaftliches Rechnen 9. Juli 2008
2 Worum geht es? Wir betrachten ein (numerisches) Problem und dessen Lösung auf einem Computer, einem Cluster und einer Grafikkarte. Es ist nicht das Ziel, neue bessere Algorithmen zu entwickeln!
3 1. Mathematische Grundlagen
4 Mathematische Grundlagen Die Matrixmultiplikation Gegeben: A M n (R), B M n (R). Gesucht: C = A B, C M n (R) Regel Vorzeile mal Nachspalte
5 Mathematische Grundlagen Laufzeit / Rechenaufwand / Speicherplatz Die Ergebnismatrix C hat n 2 Einträge. Für jeden Eintrag berechnen wir die Summe c kj = n i=1 a ki b ij. Das macht n 2 mal n Multiplikationen = n 3 Multiplikationen n 2 mal (n 1) Additionen = n 3 n 2 Additionen Insgesamt 2n 3 Operationen
6 Mathematische Grundlagen Laufzeit / Rechenaufwand / Speicherplatz Ein heutiger (guter) Rechner schafft ca. 10 GFLOPS. Das sind 10 Milliarden Gleitkommazahl-Rechenoperationen pro Sekunde. Theoretische Berechnungen: Schon für n = 1800 braucht ein Rechner mehr als eine Sekunde um das Produkt zweier Matrizen aus M n (R) zu berechnen. Das klingt zwar schnell, aber in der Praxis haben wir sehr oft n Bei einer Verdopplung von n benötigen wir die 8-fache Zeit. Praktisch sieht es ganz anders aus! DEMO
7 Mathematische Grundlagen Laufzeit / Rechenaufwand / Speicherplatz Eine Gleitkommazahl (FLOAT) belegt 4 Byte. Wir haben 3 Matrizen mit je n 2 Einträgen. Insgesamt also 12n 2 Byte an Speicherplatz. Beispiel (Speicherplatz für eine Matrix) n Speicherplatz 40kB 4MB 100MB 400 MB
8 2. Den Rechner rechnen lassen
9 Den Rechner rechnen lassen Quelltext # define N long i, j, n; float zwischenwert, ** result, ** matrix ;... for (i =0; i < N; i ++){ for (j =0; j < N; j ++){ zwischenwert =0; for (n =0; n< N; n ++){ zwischenwert += matrix [i][n]* matrix [n][j]; } result [i][j] = zwischenwert ; } }
10 Den Rechner rechnen lassen Laufzeiten N Zeit in s Zeit in min MFLOPS DEMO
11 Den Rechner rechnen lassen Laufzeiten Zeit in s N (Anzahl der Zeilen / Spalten)
12 3. Den Cluster rechnen lassen
13 Den Cluster rechnen lassen Der Cluster am IAM
14 Den Cluster rechnen lassen Der Cluster am IAM Daten zum Cluster: Anzahl der Rechner: 37 Anzahl der Prozessoren: 82 GH insgesamt: 202 Arbeitsspeicher: 90 GB Festplattenspeicher: 2 TB
15 Den Cluster rechnen lassen Den Cluster programmieren Frage: Wie arbeitet der Cluster? Was muss ich anders machen? MPI Message Passing Interface
16 Den Cluster rechnen lassen Die Verwendung von MPI #include "mpi.h" MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); Anzahl der Prozessoren MPI_Comm_rank(MPI_COMM_WORLD, &myrank); Nummer des eigenen Prozessors MPI_Finalize(); Compilieren mit mpicc...
17 Den Cluster rechnen lassen MPI Jeder Prozess (Knoten) erhält also eine eindeutige ID. Diese wird u. a. verwendet, um Aufgaben und Daten zu verteilen. Wir verwenden MPI für die Kommunikation zwischen Rechnen. Dabei unterschiedet man (je nach Betrachtungswinkel) unterschiedliche Arten.
18 Den Cluster rechnen lassen MPI Einteilung nach BLOCKIERUNG blockierende Kommunikation nichtblockierende Kommunikation Einteilung nach KOLLEKTIVITÄT kollektive Kommunikation einfache Kommunikation (senden, empfangen) Kommunikation mit Funktionen (summieren,... ) Kommunikation zwischen einzelnen Rechnern Einteilung nach STARRHEIT der Datenverteilung starres Schema variables Schema
19 Den Cluster rechnen lassen MPI Unter anderem stehen uns zur Verfügung: MPI_Send MPI_Recv MPI_Scatter MPI_Ssend MPI_Irecv MPI_Scatterv MPI_Rsend MPI_Reduce MPI_Bsend MPI_Probe MPI_Isend MPI_Gather MPI_Test MPI_Bcast MPI_Allgather MPI_Wait MPI_Alltoall MPI_Barrier
20 Den Cluster rechnen lassen MPI Einige Beispiele:
21 Den Cluster rechnen lassen MPI - kollektive Kommunikation Kollektive Kommunikation mit Funktion: MPI Reduce Die Teilergebnisse der einzelnen Rechner werden zum Chef übertragen, gleichzeitig wird eine Funktion darauf angewendet. Z. B. Summation der Teilergebnisse (bei numerischer Integration beispielsweise). Andere Beispiele sind Minimum und Maximum.
22 Den Cluster rechnen lassen MPI - kollektive Kommunikation Kollektive Kommunikation: MPI_Bcast R 0 : A R 0 : A R 1 : MPI_Bcast R 1 : A R 2 : R 2 : A R 3 : R 3 : A
23 Den Cluster rechnen lassen MPI - kollektive Kommunikation MPI_Scatter R 0 : A B C D R 0 : A R 1 : MPI_Scatter R 1 : B R 2 : R 2 : C R 3 : R 3 : D
24 Den Cluster rechnen lassen MPI - kollektive Kommunikation MPI_Gather R 0 : A R 0 : A B C D R 1 : B MPI_Gather R 1 : R 2 : C R 2 : R 3 : D R 3 :
25 Den Cluster rechnen lassen MPI - kollektive Kommunikation MPI_Allgather R 0 : A R 0 : A B C D R 1 : B MPI_Allgather R 1 : A B C D R 2 : C R 2 : A B C D R 3 : D R 3 : A B C D
26 Den Cluster rechnen lassen MPI - pfiffige Kommunikation Diese Kommunikationsstruktur ist denkbar: R 3 R 4 R 2 R 5 R 0 R 1 R 6 R 7 R 8
27 Den Cluster rechnen lassen MPI - pfiffige Kommunikation Diese Kommunikationsstruktur ist denkbar: R 3 R 4 R 2 R 5 R 0 R 1 R 6 R 7 R 8
28 Den Cluster rechnen lassen MPI - pfiffige Kommunikation Diese Kommunikationsstruktur ist denkbar: R 3 R 4 R 2 R 5 R 0 R 1 R 6 R 7 R 8
29 Den Cluster rechnen lassen MPI - pfiffige Kommunikation Denkbar schlecht. R 3 R 4 R 2 R 5 R 0 R 1 R 6 R 7 R 8
30 Den Cluster rechnen lassen MPI - pfiffige Kommunikation Besser ist: R 0
31 Den Cluster rechnen lassen MPI - pfiffige Kommunikation Besser ist: R 0 R 0 R 1
32 Den Cluster rechnen lassen MPI - pfiffige Kommunikation Besser ist: R 0 R 0 R 1 R 0 R 1 R 2 R 3
33 Den Cluster rechnen lassen MPI - pfiffige Kommunikation Besser ist: R 0 R 0 R 1 R 0 R 1 R 2 R 3 R 0 R 1 R 2 R 3 R 4 R 5 R 6 R 7
34 Den Cluster rechnen lassen MPI - pfiffige Kommunikation Und so arbeitet auch MPI_Bcast. R 0 R 0 R 1 R 0 R 1 R 2 R 3 R 0 R 1 R 2 R 3 R 4 R 5 R 6 R 7
35 Den Cluster rechnen lassen MPI - Senden und Empfangen blockiert MPI_Send (Ssend / Bsend) Je nach Datenmenge entscheidet MPI selbstständig ob MPI_Ssend oder MPI_Bsend verwendet wird. MPI_Ssend (synchrones Senden) Funktion kehrt erst zurück, nachdem mit dem Emfang der Daten begonnen wurde. MPI_Bsend (gepuffertes Senden) Sendedaten werden in einen Pufferspeicher umkopiert und von dort gesendet, die Funktion kehrt sofort nach dem Kopiervorgang zurück. MPI_Recv Prozess signalisiert seinen Empfangswunsch. Nach fehlerfreier Beendigung steht die Nachricht komplett im Empfangspuffer bereit.
36 Den Cluster rechnen lassen MPI - Senden und Empfangen Bevor wir mit nichtblockierender Kommunikation weitermachen: Tools: MPI_Wait Die Funktion kehrt erst zurück, wenn der der Sendepuffer schon komplett ausgelesen wurde. MPI_Test Überprüft, ob ein Transfer schon abgeschlossen wurde und kehrt sofort zurück. MPI_Barrier Synchronisiert alle Prozesse. Kehrt erst zurück, wenn es von allen Prozessen in einem Universum aufgerufen wurde.
37 Den Cluster rechnen lassen MPI - Senden und Empfangen nicht blockiert Nachrichtenverkehr besteht aus zwei Funktionsaufrufen. Der Erste stößt den Transfer nur an, der Zweite schließt ihn ab. MPI_Isend Stößt den Sendevorgang an. Mit MPI_Wait oder besser mit MPI_Test kann man feststellen, wann der Sendepuffer wieder überschrieben werden darf. MPI_Irecv Analog zu MPI_Isend. Vorteil: Rechnen statt Warten!
38 Den Cluster rechnen lassen Bevor wir wieder zur Matrixmultiplikation kommen, noch ein paar kleine Aspekte von MPI.
39 Den Cluster rechnen lassen Deadlocks Ein Beispiel: Es werden Funktionen für den blockierenden Nachrichtenverkehr verwendet. Und zwar wie folgt: Prozess 0 Prozess 1 MPI Send(...) MPI Send(...) MPI Recv(...) MPI Recv(...) Ein Deadlock!
40 Den Cluster rechnen lassen Fairness Wenn viele Prozesse Daten an einen Prozess senden, ist das unfair. Hier ein Beispiel: Verteilung Zeit pro Paket 2 Prozesse senden je 500 Pakete 4ms 4 Prozesse senden je 250 Pakete 7ms 10 Prozesse senden je 100 Pakete 45ms
41 Den Cluster rechnen lassen Profiling-Interface Gemäß dem MPI-Standard muss eine Funktion MPI_xyz auch unter dem Namen PMPI_xyz aufrufbar sein. Erlaubt, MPI_xyz selbst neu zu schreiben. Vorteile: Erlaubt die Anpassung von MPI an Eigenheiten des Clusters / des Programms. Möglichkeiten, Protokollierung einzubauen, ohne den Quelltext der Programme zu ändern....
42 Den Cluster rechnen lassen Datentypen Es gibt in MPI eigene Datentypen. Warum? Aus Gründen der Interpretationssicherheit! Beispiel: Auf 32-Bit CPUs besteht ein INTeger aus vier aufeinanderfolgenden Bytes = Ein Intel-Prozessor speichert dies als (7, 31, 87, 67) Ein Prozessor von Motorola speichert es als (67, 87, 31, 7). Probleme bei heterogenen Clustern!
43 Den Cluster rechnen lassen Matrixmultiplikation Natürlich gibt es noch sehr viele andere Funktionen und Möglichkeiten der Kommunikation. Wir wollen uns jetzt damit beschäftigen, wie eine einfache Matrixmultiplikation realisiert werden kann. Auch hier gibt es verschiedene Möglichkeiten.
44 Den Cluster rechnen lassen Matrixmultiplikation Es geht los,...
45 Den Cluster rechnen lassen Matrixmultiplikation... der Chef erhält (generiert) die Matrix,...
46 Den Cluster rechnen lassen Matrixmultiplikation... der Chef sendet die Matrix,...
47 Den Cluster rechnen lassen Matrixmultiplikation... alle Rechner haben die Matrix,...
48 Den Cluster rechnen lassen Matrixmultiplikation... der Chef verteilt die Aufgaben,...
49 Den Cluster rechnen lassen Matrixmultiplikation... alle Rechner wissen, was sie zu tun haben,...
50 Den Cluster rechnen lassen Matrixmultiplikation... alle Rechner rechnen,...
51 Den Cluster rechnen lassen Matrixmultiplikation... alle Rechner haben gerechnet,...
52 Den Cluster rechnen lassen Matrixmultiplikation... der Chef sammelt die Ergebnisse ein,...
53 Den Cluster rechnen lassen Matrixmultiplikation... der Chef bildet das Gesamtergebnis....
54 Den Cluster rechnen lassen Matrixmultiplikation... Habe fertig.
55 Den Cluster rechnen lassen Vor- und Nachteil(e) Vorteil: Verteilung der Arbeit auf viele Rechner Nachteile: Programmieren ist umständlicher Viel Datenverkehr über das Netzwerk (Zeit) Synchronisation notwendig (Wartezeit)
56 Den Cluster rechnen lassen Quelltext # include " mpi.h" # define N int myrank, nprocs ; float zwischenw, ** matrix, ** result, ** tmatrix ; MPI_Comm_size ( MPI_COMM_WORLD, & nprocs ); MPI_Comm_rank ( MPI_COMM_WORLD, & myrank ); for (i =0; i<n; i ++){ MPI_Bcast (& matrix [i],n, MPI_FLOAT,0, MPI_COMM_WORLD ); }
57 Den Cluster rechnen lassen Quelltext if( myrank == 0){ for ( i =0; i < zeile + rest ; i ++){ for (j =0; j < N; j ++){ zwischenw = 0; for (n =0; n< N; n ++){ zwischenwert += matrix [i][n]* matrix [n][j]; } result [i][j] = zwischenwert ; } } for (i =1; i < nprocs ; i ++){ for (j =0; j < zeile ; j ++){ MPI_Recv ( result [ zeile *i+ rest +j], N, MPI_FLOAT, i, 99, MPI_COMM_WORLD, & status ); } } } else {... }
58 Den Cluster rechnen lassen Quelltext if( myrank == 0){... } else { for ( k, j... ){ for (j =0; j < N; j ++){ zwischenw = 0; for (n =0; n<n; n ++){ zwischenw += matrix [i][n]* matrix [n][j]; } tmatrix [k][j]= zwischenw ; } } } for ( i =0; i< zeile ; i ++){ MPI_Send ( tmatrix [i], N, MPI_FLOAT, 0, 99, MPI_COMM_WORLD ); }
59 Den Cluster rechnen lassen Laufzeiten N Zeit in s Zeit in min GFLOPS DEMO
60 Den Cluster rechnen lassen Laufzeiten Gesamt Berechnung Senden Laufzeitmessung zur Matrixmultiplikation mit MPI 150 Zeit in s N (Anzahl der Zeilen / Spalten)
61 3. Die Grafikkarte rechnen lassen
62 Grafikkarte? Ja, Grafikkarte! NVIDIA GeForce 8800 GT
63 Grafikkarte? Ja, Grafikkarte! Wir verwenden die nvidia GeForce 8800 GT als extrem leistungsfähigen math. Co-Prozessor.
64 Grafikkarte? Ja, Grafikkarte! Und zur Programmierung verwenden wir CUDA Compute Unified Device Architecture
65 Die Grafikkarte rechnen lassen CUDA - Ein paar Grundlagen Der Unterschied zwischen CPU und GPU: 1. Introduction to CUDA Control Cache ALU ALU ALU ALU DRAM DRAM CPU GPU Figure 1-2. The GPU Devotes More Transistors to Data Processing
66 Die Grafikkarte rechnen lassen CUDA - Ein paar Grundlagen Im Fall der nvidia 8800 GT bedeutet das: Stream-Prozessoren: 112 Speicher: 512 MB Speicherbandbreite GB/s Gerade neu im Lehrstuhl: nvidia 9800 GX2 Stream-Prozessoren: 256 Speicher: 1 GB Speicherbandbreite. 128 GB/s
67 Die Grafikkarte rechnen lassen CUDA features a parallel data cache or on-chip shared memory with very fast CUDA - Ein paar general Grundlagen read and write access, that threads use to share data with each other (see Chapter 3). As illustrated in Figure 1-5, applications can take advantage of it by Warum die minimizing Speicherangabe? overfetch and round-trips Shared-Memory: to DRAM and therefore becoming less dependent on DRAM memory bandwidth. Control Cache ALU ALU ALU... Control Cache ALU ALU ALU... DRAM d0 d1 d2 d3 d4 d5 d6 d7 Without shared memory Control Cache ALU ALU ALU... Control Cache ALU ALU ALU... Shared memory Shared memory d0 d1 d2 d3 d4 d5 d6 d7 DRAM d0 d1 d2 d3 d4 d5 d6 d7 With shared memory Figure 1-5. Shared Memory Brings Data Closer to the ALUs
68 Die Grafikkarte rechnen lassen CUDA - Ein paar Grundlagen Wir müssen also die Daten auf die Grafikkarte bringen. CPU DRAM GPU Shared Memory Und das geht so:
69 Die Grafikkarte rechnen lassen CUDA - Ein paar Grundlagen unsigned int size_ A = wa * ha; unsigned int mem_ size_ A = sizeof ( float ) * size_ A ; float * h_a = ( float *) malloc ( mem_size_a );... float * d_a ; cudamalloc (( void **) &d_a, mem_size_a ); cudamemcpy (d_a, h_a, mem_size_a, cudamemcpyhosttodevice );... cudamemcpy (h_c, d_c, mem_size_c, cudamemcpydevicetohost );... free ( h_a ); cudafree ( d_a );
70 Die Grafikkarte rechnen lassen CUDA - Ein paar Grundlagen Das zentrale Element: Grid Block Thread Programming Model
71 Die Grafikkarte rechnen lassen CUDA - Programming Model Es gibt einen kernel. Dieser wird massiv parallel mit unterschiedlichen Daten ausgeführt. Thread Batching Organisiert wird dies in einem Grid aus thread blocks. Thread Block Ein thread block: Stapel von threads Effizienter Datenaustausch über den shared memory Möglichkeit der Synchronisation zur Koordinierung der Speicherzugriffe
72 Die Grafikkarte rechnen lassen CUDA - Programmierung mit Grids, Blocks und Threads Chapter 2. Programming Model Host Device Grid 1 Kernel 1 Block (0, 0) Block (1, 0) Block (2, 0) Block (0, 1) Block (1, 1) Block (2, 1) Grid 2 Kernel 2 Block (1, 1) Thread (0, 0) Thread (1, 0) Thread (2, 0) Thread (3, 0) Thread (4, 0) Thread (0, 1) Thread (1, 1) Thread (2, 1) Thread (3, 1) Thread (4, 1) Thread (0, 2) Thread (1, 2) Thread (2, 2) Thread (3, 2) Thread (4, 2) The host issues a succession of kernel invocations to the device. Each kernel is executed as a batch of threads organized as a grid of thread blocks
73 Die Grafikkarte rechnen lassen CUDA - Programmierung mit Grids, Blocks und Threads Ein thread wird durch seine thread ID identifiziert. thread ID = Nummer des threads im block thread ID Um komplexe Addressierung mittels thread ID zu ermöglichen, kann die ID ein-, zwei- und sogar dreidimensional sein.
74 Die Grafikkarte rechnen lassen CUDA - Programmierung mit Grids, Blocks und Threads Zugriff auf die ID: int tx = threadidx. x; int ty = threadidx. y;
75 Die Grafikkarte rechnen lassen CUDA - Programmierung mit Grids, Blocks und Threads Die Anzahl der threads in einem Block hat aber eine Höchstgrenze (abhängig von der Grafikkarte). Deshalb kann man blocks zu einem Grid zusammenfassen. Threads in unterschiedlichen Blocks können nicht miteinander kommunizieren (per shared memory) und man kann sie nicht synchronisieren! Die Ausführung der Blocks hängt von der Grafikkarte ab: Alle müssen beispielsweise nacheinander abgearbeitet werden, oder sie können alle gleichzeitig ausgeführt werden, oder eine Mischung aus beiden. Je nach den Eigenschaften der Grafikkarte.
76 Die Grafikkarte rechnen lassen CUDA - Programmierung mit Grids, Blocks und Threads Auch Blocks haben eine ID. Sie kann maximal zweidimensional sein. Zugriff auf die ID: int bx = blockidx. x; int by = blockidx. y;
77 Die Grafikkarte rechnen lassen CUDA - Das SDK Betriebssystem Windows XP in v1.1 und in v2.0beta2, Vista in v2.0beta2 Linux in v1.1 und in v2.0beta2 Mac OS X in v1.1 Grafikkarten nvidia GeForce: GTX 280, GTX 260, 9800 GX2, 9800 GTX, 9600 GT, 8800 Ultra, 8800 GTX, 8800 GTS, 8800 GT, 8800 GS, 8600 GTS, 8600 GT, 8500 GT, 8400 GS, 8800M GTX, 8800M GTS, 8700M GT, 8600M GT, 8600M GS, 8400M GT, 8400M GS Tesla: S1070, C1060, C870, D870, S870 Quadro: FX 5600, FX 4700 X2, FX 4600, FX 3700, FX 1700, FX 570, FX 370, NVS 290, FX 3600M, FX 1600M, FX 560M, FX 360M, Plex 1000 Model IV, Plex 1000 Model S4, NVS 320M, NVS 140M, NVS 135M, NVS 130M
78 Die Grafikkarte rechnen lassen CUDA - Das SDK Der Compiler NVCC Host-Code in C oder C++ Device-Code in C Device-Code: keine Rekursion! Möglichkeit die Grafikkarte nur zu emulieren.
79 Die Grafikkarte rechnen lassen CUDA - Das SDK matrixmul.cu (Host-Code) #include <matrixmul kernel.cu>... dim3 threads(16,16); dim3 grid(64,64); matrixmul<<< grid, threads >>>(... ); matrixmul kernel.cu (Device-Code)... global void matrixmul(... );... syncthreads();...
80 Die Grafikkarte rechnen lassen CUDA - Das SDK Die CUDA Utilities Im Host-Code: #include<cutil.h>. printf ist möglich, Timer sind möglich, durch cutcreatetimer, cutstarttimer, cutstoptimer und cutdestroytimer, Überprüfung auf geschehene Fehler möglich: CUT_CHECK_ERROR, CUT_DEVICE_INIT, CUT_EXIT (später in der Demo),...
81 Die Grafikkarte rechnen lassen CUDA Noch ein paar Features: CUBLAS: Single-precision Real & Complex Functions Level 1-3 CUFFT: 1-3 dim FFT: Complex-to-Complex, Real-to-Complex, Complex-to-Real Plug-ins: MATLAB Photoshop
82 Die Grafikkarte rechnen lassen Matrixmultiplikation Chapter 6. Example of Matrix Multiplication A B C C sub BLOCK_SIZE BLOCK_SIZE BLOCK_SIZE wa ha BLOCK_SIZE wa BLOCK_SIZE BLOCK_SIZE wb Each thread block computes one sub-matrix C sub of C. Each thread within the block computes one element of Csub. Ivo Hedtke Figure (hedtke@math.uni-jena.de) 6-1. Matrix Multiplication
83 Die Grafikkarte rechnen lassen Matrixmultiplikation: matrixmul.h # ifndef _ MATRIXMUL_ H_ # define _ MATRIXMUL_ H_ # define BLOCK_ SIZE 16 # define NN 4000 # define WA NN # define HA NN # define WB NN # define HB NN # define WC NN # define HC NN # endif // _MATRIXMUL_H_
84 Die Grafikkarte rechnen lassen Matrixmultiplikation: matrixmul.cu # include <stdlib.h> # include <stdio.h> # include <string.h> # include <math.h> # include <cutil.h> # include < matrixmul_kernel.cu > void InitMat ( float *, int ); void runtest (int, char **); void runtest ( int argc, char ** argv ) {
85 Die Grafikkarte rechnen lassen Matrixmultiplikation: matrixmul.cu void runtest ( int argc, char ** argv ) { unsigned int size_ A = WA * HA; unsigned int mem_ size_ A = sizeof ( float ) * size_ A ; float * h_a = ( float *) malloc ( mem_size_a ); InitMat (h_a, size_a ); float * d_a ; cudamalloc (( void **) &d_a, mem_size_a ); cudamemcpy (d_a,h_a, mem_size_a, cudamemcpyhosttodevice unsigned int size_ C = WC * HC; unsigned int mem_ size_ C = sizeof ( float ) * size_ C ; float * d_c ; cudamalloc (( void **) &d_c, mem_size_c ); float * h_c = ( float *) malloc ( mem_size_c );
86 Die Grafikkarte rechnen lassen Matrixmultiplikation: matrixmul.cu unsigned int timer = 0; cutcreatetimer (& timer ); cutstarttimer ( timer ); dim3 threads ( BLOCK_ SIZE, BLOCK_ SIZE ); dim3 grid (WC / threads.x, HC / threads.y); matrixmul <<< grid, threads >>>(d_c,d_a,d_a,wa,wb ); CUT_CHECK_ERROR (" Kernel execution failed "); cudamemcpy (h_c,d_c, mem_size_c, cudamemcpydevicetohost );
87 Die Grafikkarte rechnen lassen Matrixmultiplikation: matrixmul.cu } cutstoptimer ( timer ); printf (" Processing time for N=%i: %f (ms) \n", _ NN, cutgettimervalue ( timer )); cutdeletetimer ( timer ); printf (" %10.9 f",h_c [0]); free ( h_a ); free ( h_c ); CUDA_SAFE_CALL ( cudafree ( d_a )); CUDA_SAFE_CALL ( cudafree ( d_c ));
88 Die Grafikkarte rechnen lassen Matrixmultiplikation: matrixmul.cu int main ( int argc, char ** argv ){ CUT_ DEVICE_ INIT ( argc, argv ); // CUTIL runtest (argc, argv ); CUT_ EXIT ( argc, argv ); // CUTIL }
89 Die Grafikkarte rechnen lassen Matrixmultiplikation: matrixmul kernel.cu # include <stdio.h> # include " matrixmul.h" # define AS(i, j) As[i][j] # define BS(i, j) Bs[i][j] global void matrixmul ( float * C, float * A, _ float * B, int wa, int wb ){
90 Die Grafikkarte rechnen lassen Matrixmultiplikation: matrixmul kernel.cu int bx = blockidx. x; int by = blockidx. y; int tx = threadidx. x; int ty = threadidx. y; int abegin = wa * BLOCK_ SIZE * by; int aend = abegin + wa - 1; int astep = BLOCK_ SIZE ; int bbegin = BLOCK_ SIZE * bx; int bstep = BLOCK_ SIZE * wb; float Csub = 0;
91 Die Grafikkarte rechnen lassen Matrixmultiplikation: matrixmul kernel.cu for ( int a = abegin, b = bbegin ; a <= aend ; a += astep, b += bstep ) { shared float As[ BLOCK_SIZE ][ BLOCK_SIZE ]; shared float Bs[ BLOCK_SIZE ][ BLOCK_SIZE ]; AS(ty, tx) = A[a + wa * ty + tx ]; BS(ty, tx) = B[b + wb * ty + tx ]; syncthreads (); } for ( int k = 0; k < BLOCK_ SIZE ; ++ k){ Csub += AS(ty, k) * BS(k, tx ); syncthreads (); } syncthreads ();
92 Die Grafikkarte rechnen lassen Matrixmultiplikation: matrixmul kernel.cu } int c = wb * BLOCK_ SIZE * by + BLOCK_ SIZE * bx; C[c + wb * ty + tx] = Csub ;
93 Die Grafikkarte rechnen lassen Laufzeiten auf der GeForce 8600 GTS N dim3 grid(x) dim3 threads(y) Zeit in s GFLOPS 1024 X = (64, 64) Y = (16, 16) X = (124, 124) Y = (16, 16) X = (188, 188) Y = (16, 16) X = (250, 250) Y = (16, 16) X = (312, 312) Y = (16, 16) DEMO
94 Die Grafikkarte rechnen lassen Laufzeiten auf anderen Grafikkarten dim3 threads(16,16), dim3 threads(250,250), N=4000 GeForce 8600 GTS 10.6s, GFLOPS GeForce 8600 GT 10s, 12.8 GFLOPS GeForce 8800 GT 3s, GFLOPS
95 Die Grafikkarte rechnen lassen Laufzeiten auf anderen Grafikkarten dim3 threads(32,32), dim3 threads(125,125), N=4000 GeForce 8800 GT 95.1ms 1.34 TFLOPS
96 Die Grafikkarte rechnen lassen Laufzeiten auf der GeForce 8600 GTS Zeit in s N (Anzahl der Zeilen / Spalten)
97 Die Grafikkarte rechnen lassen Vor- und Nachteil(e) Vorteil massiv parallel Rechnen Nachteile aufwendige Programmierung Begrenzungen durch Eigenschaften der Grafikkarte Kommunikation zwischen Threads nur über Shared Memory (fast) keine Kommunikation zwischen Threads aus unterschiedlichen Blocks
98 Weitere Technologien
99 Open CL Open CL Mac OS X Server Snow Leopard
100 Open CL Open Computing Language soll erstmals von Apple 2009 mit OS X 10.6 (Snow Leopard) auf den Markt kommen wird als offener Standard bei der Khronos Group erarbeitet OpenCL Programme und Programmteile werden zur Laufzeit auf vorhandene Haupt- und Grafikprozessorkerne verteilt basiert auf der Syntax von C Die Technologie soll NVIDIAs CUDA weit voraus sein und dabei sehr einfach zu programmieren. 1 1 Quelle: NY Times
101 Midori Meldung vom 1. Juli: Angeblich auf Sinularity aufbauendes parallelisiertes Betriebssystem, welches nicht nur Forschungscharakter hat.
102 AMD Stream Computing Parallel processing architecture with 320 stream cores Up to 500 GFLOPs single precision performance 2GB GDDR3 on-board memory Windows XP, XP64, Linux 32 and Linux 64 Streams: A stream is a collection of data elements of the same type which can be operated on in parallel. Streams are denoted using angular brackets. Kernels: A kernel is a parallel function that operates on every element of input streams. Kernels are specified using the kernel keyword.
103 AMD Stream Computing Beispiel kernel void sum ( float a<>, float b<>, out float c < >) { c = a + b; } The code snippet shows a simple example of a kernel which adds two input streams and stores the results in an output stream. The kernel performs an implicit loop over each element in the output stream.
104 IBM Roadrunner
105 IBM Roadrunner Supercomputer im Los Alamos National Laboratory Leistung: 1,026 Peta-FLOPS = 1026 TFLOP 6480 AMD-Opteron-Prozessoren jedem Opteron-Kern ist ein Cell-Prozessoren unterstellt (=12960 Stück) OS: Red Hat Linux Einsatz: US-Energieministerium: Simulation der Alterung radioaktiver Substanzen
106 4. Zusammenfassung
107 Laufzeiten Zeit in s N CPU MPI GPU
108 Laufzeiten CPU MPI GPU Zeit in s N (Anzahl der Zeilen/Spalten)
109 Laufzeiten CPU MPI GPU Zeit in s N (Anzahl der Zeilen/Spalten)
110 Laufzeiten CPU MPI GPU Zeit in s N (Anzahl der Zeilen/Spalten)
111 Ein Ziel durchdachte Algorithmen + Message Passing Interface + Compute Unified Device Architecture = adäquater Ersatz für Supercomputer
112 Danke für die Aufmerksamkeit! Fragen???
Compute Unified Device Architecture CUDA
Compute Unified Device Architecture 06. Februar 2012 1 / 13 Gliederung 2 / 13 : Compute Unified Device Architecture entwickelt von Nvidia Corporation spezifiziert Software- und Hardwareeigenschaften Ziel:
MehrCUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg
CUDA Seminar Multi-Core Architectures and Programming 1 Übersicht Einleitung Architektur Programmierung 2 Einleitung Computations on GPU 2003 Probleme Hohe Kenntnisse der Grafikprogrammierung nötig Unterschiedliche
MehrGrundlagen von CUDA, Sprachtypische Elemente
Grundlagen von CUDA, Sprachtypische Elemente Stefan Maskanitz 03.07.2009 CUDA Grundlagen 1 Übersicht 1. Einleitung 2. Spracheigenschaften a. s, Blocks und Grids b. Speicherorganistion c. Fehlerbehandlung
MehrOpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer
OpenCL Programmiersprachen im Multicore-Zeitalter Tim Wiersdörfer Inhaltsverzeichnis 1. Was ist OpenCL 2. Entwicklung von OpenCL 3. OpenCL Modelle 1. Plattform-Modell 2. Ausführungs-Modell 3. Speicher-Modell
MehrMasterpraktikum Scientific Computing
Masterpraktikum Scientific Computing High-Performance Computing Thomas Auckenthaler Wolfgang Eckhardt Prof. Dr. Michael Bader Technische Universität München, Germany Outline Organisatorisches Entwicklung
MehrComputergrundlagen Moderne Rechnerarchitekturen
Computergrundlagen Moderne Rechnerarchitekturen Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2010/11 Aufbau eines modernen Computers DDR3- Speicher Prozessor Prozessor PEG
MehrPraxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern
Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern Institut für Betriebssysteme und Rechnerverbund TU Braunschweig 25.10., 26.10.
MehrGPGPU-Architekturen CUDA Programmiermodell Beispielprogramm. Einführung CUDA. Ralf Seidler. Friedrich-Alexander-Universität Erlangen-Nürnberg
Einführung CUDA Friedrich-Alexander-Universität Erlangen-Nürnberg PrakParRA, 18.11.2010 Outline 1 GPGPU-Architekturen 2 CUDA Programmiermodell 3 Beispielprogramm Outlook 1 GPGPU-Architekturen 2 CUDA Programmiermodell
MehrMasterpraktikum Scientific Computing
Masterpraktikum Scientific Computing High-Performance Computing Thomas Auckenthaler Wolfgang Eckhardt Technische Universität München, Germany Outline Entwicklung General Purpose GPU Programming (GPGPU)
MehrComputergrundlagen Moderne Rechnerarchitekturen
Aufbau eines modernen Computers Computergrundlagen Moderne Rechnerarchitekturen Axel Arnold Institut für Computerphysik Universität Stuttgart DDR3- Speicher Prozessor Prozessor PEG Graphikkarte(n) weitere
MehrDas Message Passing Paradigma (1)
Das Message Passing Paradigma (1) Das Message Passing Paradigma (2) Sehr flexibel, universell, hoch effizient Programm kann logisch in beliebig viele Prozesse aufgeteilt werden Prozesse können unterschiedlichen
MehrParalleles Rechnen: MPI
Münster Paralleles Rechnen: MPI 11.12.2015 Top 500 Münster Paralleles Rechnen: MPI 2 /23 32 Großrechner in Deutschland unter den Top 500 davon 5 Systeme unter den Top 50 8 Hazel Hen (HLRS Stuttgart) 11
MehrExkurs: Paralleles Rechnen
Münster Exkurs: Paralleles Rechnen Münster Exkurs: Paralleles Rechnen 2 /21 Konzepte für Parallelrechner P P P C C C Gemeinsamer Speicher Verteilter Speicher Verbindungsnetzwerk Speicher M, Münster Exkurs:
MehrKurzübersicht über die wichtigsten MPI-Befehle
Kurzübersicht über die wichtigsten MPI-Befehle Hans Joachim Pflug Rechen- und Kommunkationszentrum der RWTH Aachen Inhalt MPI_Init / MPI_Finalize...2 MPI_Comm_size / MPI_Comm_rank...3 MPI_Send / MPI_Recv...4
MehrGPGPU-Programmierung
12 GPGPU-Programmierung 2013/04/25 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt. Motivation (1) General Purpose Computing on
MehrEinführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg
GPU-Versuch andreas.schaefer@cs.fau.de Friedrich-Alexander-Universität Erlangen-Nürnberg Praktikum Parallele Rechnerarchitekturen SS2014 Outline 1 Einführung 2 Outlook 1 Einführung 2 Eine kurze Geschichte
MehrProgrammierbeispiele und Implementierung. Name: Michel Steuwer E-Mail: michel.steuwer@wwu.de
> Programmierbeispiele und Implementierung Name: Michel Steuwer E-Mail: michel.steuwer@wwu.de 2 > Übersicht > Matrix Vektor Multiplikation > Mandelbrotmenge / Apfelmännchen berechnen > Kantendetektion
MehrModelle der Parallelverarbeitung
Modelle der Parallelverarbeitung Modelle der Parallelverarbeitung 12. Message Passing Interface Thomas Worsch Fakultät für Informatik Karlsruher Institut für Technologie Sommersemester 2017 1 / 36 Überblick
MehrGPGPU-Programmierung
12 GPGPU-Programmierung 2014/04/29 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt. Motivation (1) General Purpose Computing on
Mehr4.4. MPI Message Passing Interface
4.4. MPI Message Passing Interface Ferienakademie 2009 Franz Diebold Agenda 1. Einführung, Motivation 2. Kommunikationsmodell 3. Punkt-Zu-Punkt-Kommunikation 4. Globale Kommunikation 5. Vergleich MPI und
MehrProgrammierung von Graphikkarten
Programmierung von Graphikkarten Stefan Lang Interdisziplinäres Zentrum für Wissenschaftliches Rechnen Universität Heidelberg INF 368, Raum 532 D-69120 Heidelberg phone: 06221/54-8264 email: Stefan.Lang@iwr.uni-heidelberg.de
MehrYilmaz, Tolga MatNr: Mesaud, Elias MatNr:
Yilmaz, Tolga MatNr: 157317 Mesaud, Elias MatNr: 151386 1. Aufbau und Funktionsweise einer Grafikkarte 2. CPU vs. GPU 3. Software 4. Beispielprogramme Kompilierung und Vorführung 5. Wo wird Cuda heutzutage
MehrGPGPU-Architekturen CUDA Programmiermodell Beispielprogramm Organiosatorisches. Tutorial CUDA. Ralf Seidler
Friedrich-Alexander-Universität Erlangen-Nürnberg 05.10.2010 Outline 1 GPGPU-Architekturen 2 CUDA Programmiermodell 3 Beispielprogramm 4 Organiosatorisches Outlook 1 GPGPU-Architekturen 2 CUDA Programmiermodell
MehrGliederung. Was ist CUDA? CPU GPU/GPGPU CUDA Anwendungsbereiche Wirtschaftlichkeit Beispielvideo
Gliederung Was ist CUDA? CPU GPU/GPGPU CUDA Anwendungsbereiche Wirtschaftlichkeit Beispielvideo Was ist CUDA? Nvidia CUDA ist eine von NvidiaGPGPU-Technologie, die es Programmierern erlaubt, Programmteile
MehrGeneral Purpose Computation on GPUs
General Purpose Computation on GPUs Matthias Schneider, Robert Grimm Universität Erlangen-Nürnberg {matthias.schneider, robert.grimm}@informatik.stud.uni-erlangen.de M. Schneider, R. Grimm 1 Übersicht
MehrSoftware Engineering für moderne parallele Plattformen 9. GPGPUs: Grafikkarten als Parallelrechner
Software Engineering für moderne parallele Plattformen 9. GPGPUs: Grafikkarten als Parallelrechner Dipl.-Inform. Korbinian Molitorisz M. Sc. Luis Manuel Carril Rodriguez KIT Universität des Landes Baden-Württemberg
MehrPhysikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs)
Fakultätsname XYZ Fachrichtung XYZ Institutsname XYZ, Professur XYZ Physikalische Berechnungen mit General Purpose Graphics Processing Units (GPGPUs) im Rahmen des Proseminars Technische Informatik Juni
MehrProseminar. GPU-Computing Cuda vs. OpenCL. SS 2013 Alexander Stepanov
Proseminar GPU-Computing Cuda vs. OpenCL SS 2013 Alexander Stepanov Inhaltsverzeichnis 1. Einführung: Warum GPU Computing? CPU vs. GPU GPU Architektur 2. CUDA Architektur Beispiel Matrix Multiplikation
MehrEine kurze Geschichte der Grafikkarten
3.1 Einführung Eine kurze Geschichte der Grafikkarten ursprünglich: Graphics Card steuert Monitor an Mitte 80er: Grafikkarten mit 2D-Beschleunigung angelehnt an Arcade- und Home-Computer frühe 90er: erste
MehrParallele Programmierung mit MPI
Parallele Programmierung mit MPI Marc-Oliver Straub entstanden aus: Parallele Programmierung mit MPI - ein Praktikum Warum Parallelprogrammierung große numerische Probleme (Simulation) optische Bildverarbeitung
MehrRheinisch-Westfälische Technische Hochschule Aachen. Seminararbeit
Rheinisch-Westfälische Technische Hochschule Aachen Seminararbeit Analyse von General Purpose Computation on Graphics Processing Units Bibliotheken in Bezug auf GPU-Hersteller. Gregori Kerber Matrikelnummer
Mehr> High-Level Programmierung heterogener paralleler Systeme
> High-Level Programmierung heterogener paralleler Systeme Projektseminar im SoSe 2012 Prof. Sergei Gorlatch, Michel Steuwer, Tim Humernbrum AG Parallele und Verteilte Systeme, Westfälische Wilhelms-Universität
MehrZum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE
Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE 754 Standard festgelegt. Es stehen sogenannte einfach
MehrGPGPU-Programming. Constantin Timm Informatik 12 TU Dortmund 2012/04/09. technische universität dortmund. fakultät für informatik informatik 12
12 GPGPU-Programming Constantin Timm Informatik 12 TU Dortmund 2012/04/09 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt. Motivation
MehrKonzepte der parallelen Programmierung
Fakultät Informatik, Institut für Technische Informatik, Professur Rechnerarchitektur Konzepte der parallelen Programmierung Parallele Programmiermodelle Nöthnitzer Straße 46 Raum 1029 Tel. +49 351-463
MehrPraktikum: Paralleles Programmieren für Geowissenschaftler
Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart hermann.lenhart@zmaw.de MPI Einführung I: Einführung Nachrichtenaustausch mit MPI MPI point-to-point communication
MehrCUDA. 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
CUDA Axel Jena, Jürgen Pröll Multi-Core Architectures and Programming Axel Jena, Jürgen Pröll 1 Warum Tesla? Traditionelle Graphikkarten Getrennte Prozessoren für Vertex- / Pixelberechnungen - Nachteil:
MehrMulti- und Many-Core
Multi- und Many-Core Benjamin Warnke Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 2016-12-15 Benjamin
MehrInteraktive Globale Beleuchtung nach dem Antiradiance-Verfahren mittels der Open Computing Language (OpenCL)
Interaktive Globale Beleuchtung nach dem Antiradiance-Verfahren mittels der Open Computing Language (OpenCL) Verteidigung der Belegarbeit Andreas Stahl Zielstellung Globales Beleuchtungsverfahren für die
MehrRST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck
RST-Labor WS06/07 GPGPU General Purpose Computation On Graphics Processing Units (Grafikkarten-Programmierung) Von: Marc Blunck Ablauf Einführung GPGPU Die GPU GPU Architektur Die Programmierung Programme
MehrVorlesung Betriebssysteme II
1 / 15 Vorlesung Betriebssysteme II Thema 3: IPC Robert Baumgartl 20. April 2015 2 / 15 Message Passing (Nachrichtenaustausch) Prinzip 2 grundlegende Operationen: send(), receive() notwendig, wenn kein
MehrCilk Sprache für Parallelprogrammierung. IPD Snelting, Lehrstuhl für Programmierparadigmen
Cilk Sprache für Parallelprogrammierung IPD Snelting, Lehrstuhl für Programmierparadigmen David Soria Parra Geschichte Geschichte Entwickelt 1994 am MIT Laboratory for Computer Science Cilk 1: Continuations
MehrGrafikkarten-Architektur
> Grafikkarten-Architektur Parallele Strukturen in der GPU Name: Sebastian Albers E-Mail: s.albers@wwu.de 2 > Inhalt > CPU und GPU im Vergleich > Rendering-Pipeline > Shader > GPGPU > Nvidia Tesla-Architektur
MehrMehrprozessorarchitekturen
Mehrprozessorarchitekturen (SMP, UMA/NUMA, Cluster) Arian Bär 12.07.2004 12.07.2004 Arian Bär 1 Gliederung 1. Einleitung 2. Symmetrische Multiprozessoren (SMP) Allgemeines Architektur 3. Speicherarchitekturen
MehrOpenCL. OpenCL. Boris Totev, Cornelius Knap
OpenCL OpenCL 1 OpenCL Gliederung Entstehungsgeschichte von OpenCL Was, warum und überhaupt wieso OpenCL CUDA, OpenGL und OpenCL GPUs OpenCL Objekte Work-Units OpenCL Adressbereiche OpenCL API Codebeispiel
MehrCUDA. (Compute Unified Device Architecture) Thomas Trost. May 31 th 2016
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
Mehr2 Rechnerarchitekturen
2 Rechnerarchitekturen Rechnerarchitekturen Flynns Klassifikation Flynnsche Klassifikation (Flynn sche Taxonomie) 1966 entwickelt, einfaches Modell, bis heute genutzt Beschränkung der Beschreibung auf
MehrAutomatische OpenCL-Code-Analyse zur Bestimmung von Speicherzugriffsmustern
Automatische OpenCL-Code-Analyse zur Bestimmung von Speicherzugriffsmustern Bachelorarbeit Moritz Lüdecke 8. Juli 2014 INSTITUT FÜR TECHNISCHE INFORMATIK - LEHRSTUHL FÜR RECHNERARCHITEKTUR UND PARALLELVERARBEITUNG
MehrAngewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der
MehrVorlesung Parallelrechner und Parallelprogrammierung, SoSe 2016
Paralleles Programmieren mit OpenMP und MPI MPI-Übungsaufgaben Vorlesung Parallelrechner und Parallelprogrammierung, SoSe 2016 Hartmut Steinbuch Häfner, Centre Steinbuch for Computing Centre for Computing
MehrPraktikum: Paralleles Programmieren für Geowissenschaftler
Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart, Ulrich Körner, Nathanael Hübbe hermann.lenhart@zmaw.de MPI Einführung III: Kommunikation Standard = blockierende
MehrMulticore-Architekturen
Universität Erlangen- Nürnberg Technische Universität München Universität Stuttgart Multicore-Architekturen Vortrag im Rahmen der Ferienakademie 2009 Kurs 1: Programmierkonzepte für Multi-Core Rechner
MehrSysteme 1: Architektur
slide 1 Vorlesung Systeme 1: Architektur Prof. Dr. Ulrich Ultes-Nitsche Forschungsgruppe Departement für Informatik Universität Freiburg slide 2 Prüfung 18. Februar 2004 8h00-11h40 13h00-18h20 20 Minuten
MehrPraktikum: Paralleles Programmieren für Geowissenschaftler
Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart, Nathanael Hübbe hermann.lenhart@informatik.uni-hamburg.de MPI Kommunikation: Das wichtigste Kriterium für
MehrMessage-Passing: Einführung
Message-Passing: Einführung Architecture of Parallel Computer Systems WS15/16 JSimon 1 Punkt zu Punkt Senden und Empfangen Message-Passing Mechanismus Erzeugung von Prozessen Übertragung einer Nachricht
MehrGPGPU Basiskonzepte. von Marc Kirchhoff GPGPU Basiskonzepte 1
GPGPU Basiskonzepte von Marc Kirchhoff 29.05.2006 GPGPU Basiskonzepte 1 Inhalt Warum GPGPU Streams, Kernels und Prozessoren Datenstrukturen Algorithmen 29.05.2006 GPGPU Basiskonzepte 2 Warum GPGPU? Performance
MehrFerienakademie Erik Muttersbach
Ferienakademie 2009 - Erik Muttersbach 1. Einführung 2. Kernels, Threads, Blocks 3. CUDA Execution Model 4. Software Stack 5. Die CUDA Runtime API 6. Speichertypen/ Zugriff 7. Profiling und Optimierung
MehrRechnerarchitektur SS 2013
Rechnerarchitektur SS 2013 Parallel Random Access Machine (PRAM) Michael Engel TU Dortmund, Fakultät für Informatik Teilweise basierend auf Material von Gernot A. Fink und R. Yahyapour 6. Juni 2013 Parallel
MehrGPU-Programmierung: OpenCL
Seminar: Multicore Programmierung Sommerstemester 2009 04.06.2009 Inhaltsverzeichnis 1 GPU-Programmierung von Grafikkarten von GPU-Computing 2 Architektur Spracheigenschaften Vergleich mit CUDA Beispiel
MehrCompute Unified Device Architecture (CUDA)
Compute Unified Device Architecture (CUDA) Thomas Koller 12. Februar 2012 Zusammenfassung Diese Ausarbeitung beschäftigt sich mit der Programmierung von Grafikkarten mittels CUDA. Bei bestimmten Berechnungen
MehrCUDA Workshop. Ausblick. Daniel Tenbrinck
CUDA Workshop Ausblick Daniel Tenbrinck Computer Vision and Pattern Recognition Group Institut für Informatik Westfälische Wilhelms-Universität Münster 03.Juli 2009 Folie: 1 / 10 Daniel Tenbrinck CUDA
MehrMPI Message Passing Interface. Matus Dobrotka Jan Lietz
MPI Message Passing Interface Matus Dobrotka Jan Lietz 25.5.2016 MPI Ein Standard, der den Nachrichtenaustausch bei parallelen Berechnungen auf verteilten Computersystemen beschreibt MPI-Applikation mehrere
MehrTrend der letzten Jahre in der Parallelrechentechnik
4.1 Einführung Trend der letzten 10-15 Jahre in der Parallelrechentechnik weg von den spezialisierten Superrechner-Plattformen hin zu kostengünstigeren Allzwecksystemen, die aus lose gekoppelten einzelnen
MehrÜbung 3: VHDL Darstellungen (Blockdiagramme)
Übung 3: VHDL Darstellungen (Blockdiagramme) Aufgabe 1 Multiplexer in VHDL. (a) Analysieren Sie den VHDL Code und zeichnen Sie den entsprechenden Schaltplan (mit Multiplexer). (b) Beschreiben Sie zwei
MehrOpenCL Implementierung von OpenCV Funktionen
Multi-Core Architectures and Programming OpenCL Implementierung von OpenCV Funktionen julian.mueller@e-technik.stud.uni-erlangen.de Hardware/Software Co-Design August 18, 2011 1 Table of content 1 OpenCL
MehrPraktikum: Paralleles Programmieren für Geowissenschaftler
Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart, Enno Zieckler hermann.lenhart@informatik.uni-hamburg.de MPI Kommunikation: Das wichtigste Kriterium für
MehrCUDA by Example. Paralleles Rechnen auf der Grafikkarte. Leipzig, Paul Jähne SethosII
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
MehrStream Processing und High- Level GPGPU Sprachen
Stream Processing und High- Level GPGPU Sprachen Seminar Programmierung von Grafikkarten Jens Breitbart Problem 5000% 4000% 3000% 2000% Rechenleistung: +71% pro Jahr Bandbreite: +25% pro Jahr Zugriffszeit:
MehrParalleler Cuckoo-Filter. Seminar: Implementierungstechniken für Hauptspeicherdatenbanksysteme Jeremias Neth München, 21.
Paralleler Cuckoo-Filter Seminar: Implementierungstechniken für Hauptspeicherdatenbanksysteme Jeremias Neth München, 21. November 2017 1 Paralleler Cuckoo-Filter Cuckoo-Hashtabelle Serieller Cuckoo-Filter
MehrÜbungspaket 23 Mehrdimensionale Arrays
Übungspaket 23 Mehrdimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung mehrdimensionaler Arrays Kapitel: 49 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:
MehrOpenCL. Multi-Core Architectures and Programming (Seminar) Apelt, Nicolas / Zöllner, Christian
OpenCL Multi-Core Architectures and Programming (Seminar) Apelt, Nicolas / Zöllner, Christian Hardware-Software-Co-Design Universität Erlangen-Nürnberg Apelt, Nicolas / Zöllner, Christian 1 Was ist OpenCL?
MehrTSM 5.2 Experiences Lothar Wollschläger Zentralinstitut für Angewandte Mathematik Forschungszentrum Jülich
TSM 5.2 Experiences Lothar Wollschläger Zentralinstitut für Angewandte Mathematik Forschungszentrum Jülich L.Wollschlaeger@fz-juelich.de Contents TSM Test Configuration Supercomputer Data Management TSM-HSM
MehrGPGPU Programming nvidia CUDA vs. AMD/ATI Stream Computing. Seminar HWS 08/09 by Erich Marth
Computing 1 Inhalt Einführung nvidia CUDA AMD Stream Computing CUDA vs. Stream Computing - Warum, Vorteile, Motivation - Überblick, API - Details, Beispiele - Überblick, API - Details, Beispiele - wesentliche
MehrExkurs: Paralleles Rechnen
Münster Exkurs: Paralleles Rechnen December 2, 2013 , Münster Exkurs: Paralleles Rechnen 2 /27 Warum parallel Rechnen? Westf alische Wilhelms-Universit at M unster Exkurs: Paralleles Rechnen 2 /27 JUQUEEN,
MehrSoftware Engineering für moderne, parallele Plattformen. 9. GPGPUs: Grafikkarten als Parallelrechner. Dr. Victor Pankratius
Software Engineering für moderne, parallele Plattformen 9. GPGPUs: Grafikkarten als Parallelrechner Dr. Victor Pankratius Dr. Victor Pankratius, Dipl.Inform. Frank Otto IPD Tichy Lehrstuhl für Programmiersysteme
MehrGPGPU mit NVIDIA CUDA
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
MehrOutline. Cell Broadband Engine. Application Areas. The Cell
Outline 21.March 2006 Benjamin Keck Why Cell?!? Application Areas Architectural Overview Programming Model Programming on the PPE C/C++ Intrinsics 1 2 The Cell Supercomputer on a chip Multi-Core Microprocessor
MehrEntwicklung algorithmischer Skelette für CUDA am Beispiel von Affintiy Propagation
Entwicklung algorithmischer Skelette für CUDA am Beispiel von Affintiy Propagation Christoph Winter Fakultät für Informatik und Mathematik Ostbayerische Technische Hochschule Regensburg 93049 Regensburg
MehrLinux-Cluster mit Raspberry Pi. Dr. René Richter Sächsische Studienakademie Dresden rene.richter@ba-dresden rene.richter@namespace-cpp.
Linux-Cluster mit Raspberry Pi Dr. René Richter Sächsische Studienakademie Dresden rene.richter@ba-dresden rene.richter@namespace-cpp.de Lange Nacht der Wissenschaften 2013 Moore s Law Moore s Law (1965)
MehrMotivation (GP)GPU CUDA Zusammenfassung. CUDA und Python. Christian Wilms. Integriertes Seminar Projekt Bildverarbeitung
CUDA und Python Christian Wilms Integriertes Seminar Projekt Bildverarbeitung Universität Hamburg WiSe 2013/14 12. Dezember 2013 Christian CUDA und Python 1 Gliederung 1 Motivation 2 (GP)GPU 3 CUDA 4 Zusammenfassung
MehrUnicode Support Atomic Operations Thread Support Type-Generic Makros Sicherheit Ease-of-Use C11. Thomas Duckardt
C11 Thomas Duckardt Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 22.05.2014 1 / 22 Gliederung (Agenda)
MehrBeschreiben Sie die Eigenschaften der verschiedenen Rechnertypen an Hand:
Hochschule Harz FB Automatisierung/Informatik Fachprüfung: Parallele Algorithmen (Musterklausur) Alle Hilfsmittel sind zugelassen! 1. Aufgabe Beschreiben Sie die Eigenschaften der verschiedenen Rechnertypen
MehrParallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff
Parallel Computing Einsatzmöglichkeiten und Grenzen Prof. Dr. Nikolaus Wulff Parallel Architekturen Flynn'sche Klassifizierung: SISD: single Instruction, single Data Klassisches von-neumann sequentielles
MehrInnere Schleife Optimierungsbeispiele Teure Operationen MPI Zusammenfassung. Optimierung. Nathanael Hübbe.
Optimierung Nathanael Hübbe nathanael.huebbe@informatik.uni-hamburg.de University of Hamburg 16-05-2013 1 / 25 Was ist die innere Schleife? Beobachtung: Praktisch alle Programme verbringen praktisch alle
MehrParallel Programming: Message-Passing-Interface
Vorlesung Rechnerarchitektur 2 Seite 71 MPI-Einführung Parallel Programming: Voraussetzungen im Source-Code für ein MPI Programm: mpi.h includen Die Kommandozeilenparameter des Programms müssen an MPI_Init
MehrOpenMP - Geschichte. 1997: OpenMP Version 1.0 für Fortran
OpenMP - Geschichte 1997: OpenMP Version 1.0 für Fortran Standard für f r die Shared-Memory Memory-Programmierung inzwischen für f r alle namhaften SMP-Rechner verfügbar wird im techn.-wiss. Rechnen die
MehrComputergrafik Universität Osnabrück, Henning Wenke,
Computergrafik Universität Osnabrück, Henning Wenke, 2012-06-25 Kapitel XV: Parallele Algorithmen mit OpenCL 15.1 Parallele Programmierung Quellen: V.a. Wikipedia. Leistungsdaten unter Vorbehalt. Bitte
MehrEin kleiner Einblick in die Welt der Supercomputer. Christian Krohn 07.12.2010 1
Ein kleiner Einblick in die Welt der Supercomputer Christian Krohn 07.12.2010 1 Vorschub: FLOPS Entwicklung der Supercomputer Funktionsweisen von Supercomputern Zukunftsvisionen 2 Ein Top10 Supercomputer
MehrSpielst du noch oder rechnest du schon?
Spielst du noch oder rechnest du schon? Mit Spielkonsole und Co. zum Supercomputer der Zukunft Fachbereich Elektrotechnik und Informationstechnik Fachhochschule Bielefeld University of Applied Sciences
MehrHochleistungsrechnen auf dem PC
Hochleistungsrechnen auf dem PC Steffen Börm Christian-Albrechts-Universität zu Kiel Ringvorlesung Informatik, 26. Juni 2014 S. Börm (CAU Kiel) Hochleistungsrechnen auf dem PC 26. Juni 2014 1 / 33 Übersicht
MehrPraktikum: Paralleles Programmieren für Geowissenschaftler
Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart, Nathanael Hübbe hermann.lenhart@zmaw.de MPI Einführung I: Hardware Voraussetzung zur Parallelen Programmierung
MehrEvaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick
Christopher Schleiden Bachelor Kolloquium 15.09.2009 Einleitung Evaluation Implementierung Integration Zusammenfassung Ausblick Einleitung laperf Lineare Algebra Bibliothek für C++ Möglichkeit zur Integration
MehrCell and Larrabee Microarchitecture
Cell and Larrabee Microarchitecture Benjamin Grund Dominik Wolfert Universität Erlangen-Nürnberg 1 Übersicht Einleitung Herkömmliche Prozessorarchitekturen Motivation für Entwicklung neuer Architekturen
MehrPraktikum: Paralleles Programmieren für Geowissenschaftler
Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart hermann.lenhart@informatik.uni-hamburg.de MPI Einführung II: Send/Receive Syntax Broadcast Reduce Operation
Mehrtechnische universität dortmund Lehrstuhl für Hochfrequenztechnik Übertragungssysteme
Lehrstuhl für Hochfrequenztechnik GPU-beschleunigte numerische Simulation faseroptischer Übertragungssysteme, Marius Helf, Peter Krummrich Übersicht Motivation Split-Step p Fourier Methode Ansätze für
MehrCell Broadband Engine
Cell Broadband Engine 21.March 2006 Benjamin Keck Outline Why Cell?!? Application Areas Architectural Overview SPU Programming Model Programming on the PPE C/C++ Intrinsics The Cell Supercomputer on a
MehrGPGPU WITH OPENCL. Praktikum Parallele Rechnerarchitekturen, 2015w Franz Richter-Gottfried
GPGPU WITH OPENCL Praktikum Parallele Rechnerarchitekturen, 2015w Franz Richter-Gottfried INFRASTRUCTURE Enqueue interactive job srun --gres --pty bash Graphics cards available for tesla_k20,
Mehr