Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Parallel Matrix Multiplication

Ähnliche Präsentationen


Präsentation zum Thema: "Parallel Matrix Multiplication"—  Präsentation transkript:

1 Parallel Matrix Multiplication
Parallel Programming Parallel Matrix Multiplication

2 Übersicht Nachbesprechung der Übung 4
Übungsaufgaben zu Condition Queues und Thread.join() K-Best Measurement Vorbesprechung der Übung 5

3 1. Nachbesprechung Übung 4

4 Korrekt, oder? Vorsicht mit = und == if(condition) besser als if(condition == true) if(!condition) besser als if(condition == false) public synchronized int read() throws BufferEmptyException { if(isEmpty = true) { throw new BufferEmptyException(); } else { isEmpty = false; return data; }

5 Diskussion Ist die parallele Version schneller?
Wieviele Threads liefern die beste Performance? Was ist der Einfluss von CPU- Modell/CPU-Taktfrequenz?

6 Paralleles Mergesort 5,2,1,9 5,2 1,9 5 2 1 9

7 Paralleles Mergesort „fork-join” 5,2,1,9 5,2 1,9 1 9 5 2 1,9 2,5
run() { } 1 9 5 2 = start() = join() 1,9 2,5 1,2,5,9

8 Source Code

9 2. Condition Queues & Thread.Join()

10 Parallel Map Einagbe: Ausgabe:
Liste von Zahlen Eine Funktion Ausgabe: Wir nehmen Fliesskommazahlen (double) und (Math.sqrt(x))

11 Barrier Einzelne Threads dürfen erst forfahren wenn alle anderen an der selben Stelle angelangt sind Kann effizienter sein als fork-join. barrier() barrier() barrier() start() barrier() join()

12 3. K-Best Measurement

13 K-Best Measurement Aus n Messungen, nimmt man die k besten Werte.
Wenn sie von einander mehr als ε relative Abweichung haben verwirft man die gesamte Messreihe Sonst nimmt man das Arithmetische Mittel der k besten Werte als Resultat. Wieso reicht eine einzelne Messung nicht? Wieso reicht das arithmetische Mittel vieler Messungen nicht? Wieso ist K-Best sinnvoll?

14 Parallel Matrix Multiplication
4. Vorbesprechung Übung 5

15 Matrix-Multiplikation
Gegeben: Matrizen Gesucht: Matrixprodukt wobei Die Matrizen sind „voll besetzt“ „Dünn besetzte“ Matrizen haben viele Nullelemente. Nur die Nicht-Nullelemente werden gespeichert (platzsparend aber kompliziert

16 Parallele Matrixmultiplikation
Welche Operationen können parallel ausgeführt werden? = x C A B

17 Matrixmultiplikation programmieren
Random rand = new Random(); double[][] a = new double[n][n]; double[][] b = new double[n][n]; double[][] c = new double[n][n]; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { a[i][j] = rand.nextDouble(); b[i][j] = rand.nextDouble(); c[i][j] = 0.0; } for(int k = 0; k < n; k++) { c[i][j] += a[i][k]*b[k][j];

18 Parallele Matrixmultiplikation
Aufteilung der Daten, basierend auf Eingabematrix A? Eingabematrix B? Ausgabematrix C? Alle Threads können aus A und B lesen C zwischen den Threads aufteilen Vorteil: Kein synchronized nötig. = x C A B

19 Parallele Matrixmultiplikation
Jeder Thread berechnet „seinen Teil“ der Ausgabematrix C. Teile C auf in Spalten = x T1 T2 T3 T4 … … Tn C A B

20 Zwei Threads Thread #1: Spalten 0 bis n/2 Thread #2: Spalten n/2+1 bis n-1 = x T T2 C A B

21 Zwei Threads Thread 1 Thread 2 for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) { for(k = 0; k < n/2; k++) { c[i][j] += a[i][k]*b[k][j]; } Thread 2 for(k = n/2+1; k < n; k++) {

22 Andere Aspekte Aufteilen in Spalten oder Zeilen? T1 T2 T3 T4 … … Tn =
x C A B

23 Reihenfolge der Schleifen?
for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { for(int k = 0; k < n; k++) { c[i][j] += a[i][k]*b[k][j]; } Oder? for(int k = 0; i < n; i++) { for(int i = 0; j < n; j++) { for(int j = 0; k < n; k++) {

24 Performance-Messung n t 1 2 4 8 16 32 … 512 n ≔ Matrixgrösse
100 × 200 500 10´000 n ≔ Matrixgrösse t ≔ Anzahl Threads Frage: Wieviele Threads sind optimal?

25 Fragen?


Herunterladen ppt "Parallel Matrix Multiplication"

Ähnliche Präsentationen


Google-Anzeigen