parallel programming parallel matrix multiplication klauserc/fs10/pp
TRANSCRIPT
![Page 1: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/1.jpg)
Parallel Programming
Parallel Matrix Multiplication
http://n.ethz.ch/~klauserc/FS10/PP/
![Page 2: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/2.jpg)
Übersicht
1. Nachbesprechung der Übung 4
2. Übungsaufgaben zu Condition Queues und Thread.join()
3. K-Best Measurement
4. Vorbesprechung der Übung 5
![Page 3: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/3.jpg)
1. NACHBESPRECHUNGÜBUNG 4
![Page 4: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/4.jpg)
Korrekt, oder?
public synchronized int read() throws BufferEmptyException
{if(isEmpty = true) {
throw new BufferEmptyException();} else {
isEmpty = false;return data;
}}
•Vorsicht mit = und ==•if(condition) besser als if(condition == true)•if(!condition) besser als if(condition == false)
![Page 5: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/5.jpg)
Diskussion
• Ist die parallele Version schneller?
• Wieviele Threads liefern die beste Performance?
• Was ist der Einfluss von CPU-Modell/CPU-Taktfrequenz?
![Page 6: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/6.jpg)
Paralleles Mergesort
5 2 1 9
1,95,2
5,2,1,9
![Page 7: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/7.jpg)
Paralleles Mergesort5,2,1,9
5,2
5
2,5
1,2,5,9
2 91
1,9
1,9
= start()
= join()
run() {
…
}
„fork-join”
![Page 8: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/8.jpg)
Source Code
![Page 9: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/9.jpg)
2. CONDITION QUEUES & THREAD.JOIN()
![Page 10: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/10.jpg)
Parallel Map
Einagbe:
Liste von Zahlen
Eine Funktion
Ausgabe:
Liste von Zahlen
• Wir nehmen Fliesskommazahlen (double) und (Math.sqrt(x))
![Page 11: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/11.jpg)
Barrier
• Einzelne Threads dürfen erst forfahren wenn alle anderen an der selben Stelle angelangt sind
• Kann effizienter sein als fork-join.
start() barrier()
barrier()
barrier()
barrier()
join()
![Page 12: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/12.jpg)
3. K-BEST MEASUREMENT
![Page 13: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/13.jpg)
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?
![Page 14: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/14.jpg)
4. VORBESPRECHUNG ÜBUNG 5
Parallel Matrix Multiplication
![Page 15: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/15.jpg)
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
![Page 16: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/16.jpg)
Parallele Matrixmultiplikation
• Welche Operationen können parallel ausgeführt werden?
= x
C A B
![Page 17: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/17.jpg)
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 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]; } }}
![Page 18: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/18.jpg)
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
![Page 19: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/19.jpg)
Parallele Matrixmultiplikation
Jeder Thread berechnet „seinen Teil“ der Ausgabematrix C.
Teile C auf in Spalten
= x
C A B
T1 T2 T3 T4 … … Tn
![Page 20: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/20.jpg)
Zwei Threads
Thread #1: Spalten 0 bis n/2
Thread #2: Spalten n/2+1 bis n-1
= x
C A B
T1 T2
![Page 21: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/21.jpg)
Zwei ThreadsThread 1for(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 2for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { for(k = n/2+1; k < n; k++) { c[i][j] += a[i][k]*b[k][j]; } }}
![Page 22: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/22.jpg)
Andere Aspekte
• Aufteilen in Spalten oder Zeilen?
= x
C A B
T1 T2 T3 T4 … … Tn
![Page 23: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/23.jpg)
•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++) { c[i][j] += a[i][k]*b[k][j]; } }}
•Oder?
![Page 24: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/24.jpg)
Performance-Messungn t 1 2 4 8 16 32 … 51
2100 ×
200 ×
500
⋮
10´000
n ≔ Matrixgrösset ≔ Anzahl Threads
Frage: Wieviele Threads sind optimal?
![Page 25: Parallel Programming Parallel Matrix Multiplication klauserc/FS10/PP](https://reader036.vdocuments.us/reader036/viewer/2022062417/55204d7549795902118ca88c/html5/thumbnails/25.jpg)
FRAGEN?