Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Wilfreda Dubs Geändert vor über 10 Jahren
1
Parallel Programming Parallel Matrix Multiplication http://n.ethz.ch/~klauserc/FS10/PP/
2
Übersicht 1. Nachbesprechung der Übung 5
3
1. NACHBESPRECHUNG ÜBUNG 5
4
Korrekt, oder? int z1 = (int) Math.ceiling(x); //x is int long z2 = (long) Math.ceiling(y); //y is long
5
Diskussion Ist die parallele Version schneller ? Wieviele Threads liefern die beste Performance ? Was ist der Einfluss von CPU - Modell / CPU - Taktfrequenz ?
6
Parallele Matrixmultiplikation Welche Operationen können parallel ausgeführt werden ? = x CAB
7
Partitionierung der Ausgabe Thread 0 for (i=0; i<N/2; i++) { for (j=0; j<N; j++) { for (k=0; k<N; k++) { c[i][j] += a[i][k]*b[k][j]; } Thread 1 for (i=N/2; i<N; i++) { for (j=0; j<N; j++) { for (k=0; k<N; k++) { c[i][j] += a[i][k]*b[k][j]; }
8
Source Code
9
Partitionierung der Eingabe Thread 0 for (i=0; i<N; i++) { for (j=0; j<N; j++) { synchronized (lock[i][j]) { for (k=0; k<N/2; k++) { c[i][j] += a[i][k]*b[k][j]; } Thread 1 for (i=0; i<N; i++) { for (j=0; j<N; j++) { synchronized (lock[i][j]) { for (k=N/2; k<N; k++) { c[i][j] += a[i][k]*b[k][j]; }
10
Overhead Über eine komplette Zeile locken. Wettstreit um einzelne Zeile in Wirklichkeit gering Nur wenig langsamer als erste Lösung ( wenige %)
11
Partitionierung de Eingabe (Lock über einzelne Elemente) Thread 0 for (i=0; i<N; i++) { for (j=0; j<N; j++) { for (k=0; k<N/2; k++) { synchronized (lock[i][j]) { c[i][j] += a[i][k]*b[k][j]; } Thread 1 ditto Riesiger Overhead ! Etwa 3 x langsamer als Lock über ganze Zeilen
12
FRAGEN?
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.