Parallel Matrix Multiplication

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Imperative Programmierung
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
3. Kapitel: Komplexität und Komplexitätsklassen
Seminar Stochastik im WS 02/03
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
FOR Anweisung.
Dynamische Programmierung (2) Matrixkettenprodukt
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
V09 Fallende Formen, Geschwindigkeitsregelung und Timing Daniel Ebner Spieleprogrammierung mit DirectX und C++
DVG Ablaufsteuerung
Vortrag: Ingo Gensch, Mathias Reich am:
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Einführung in die Programmierung Anweisungen und Datentypen
Informatikunterricht mit Java
Matrix Multiplication on CUDA
Struktogramme IF-ELSE FOR – Schleife
Grundkonzepte Java - Klassendefinition
Java programmieren mit JavaKara
Informatik 1 Übung 2.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Polynome und schnelle Fourier-Transformation
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmiersprache C 4
Parallel Programming Proofs ( yay !)
Parallel Programming Parallel Matrix Multiplication
Informatik 1 Übung 4.
Parallel Programming Condition Queues
Parallel Programming ( J ) CSP
Technische Informatik Reihungen – Felder - Arrays.
Ein Vortrag von Simon Bayer
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
Grundkonzepte des Programmierens (mit ActionScript)
Algorithmen und Datenstrukturen SS 2005
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 2 Dr. W. Narzt u. Dr. A. Stritzinger.
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
PHP: Operatoren und Kontrollstrukturen
Variablen. var meineZahl:Number = 7; meineZahl 7 Name TypWert = Zuweisung von Variablen.
JOMP
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Parallelisierung für Multiprozessor-Maschinen
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Übung 2 - MdMT Methoden der Medizintechnik Übung zur Vorlesung Folge 2 – Basics Vom ersten Befehl zum Plot.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Diskrete Mathematik I Vorlesung 2 Arrays.
2 Datenabstraktion Geheimnisprinzip:
G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/ Übungsaufgabe vom Logische Ausdrücke 1.true & false | true 2.(10>2)
Parallel Programming Semaphores / Reader - Writer - Lock
Parallel Programming Linearizability
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Wozu Maple? Symbolische Algebra Manche Sachen soll man besser nicht von Hand machen –kleine Rechnungs Fehler können mehrere Millionen werden – am besten.
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
Felder in Java.
Christian Scheideler WS 2008
Raphael Fischer Informatik II - Übung 10 Raphael Fischer
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

Parallel Matrix Multiplication Parallel Programming Parallel Matrix Multiplication http://n.ethz.ch/~klauserc/FS10/PP/

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

1. Nachbesprechung Übung 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; }

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

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

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

Source Code

2. Condition Queues & Thread.Join()

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

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()

3. K-Best Measurement

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?

Parallel Matrix Multiplication 4. Vorbesprechung Übung 5

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

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

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];

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

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

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

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++) {

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

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++) {

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?

Fragen?