Präsentation herunterladen
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?
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.