Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Datenparallele Algorithmische Skelette in Muesli

Ähnliche Präsentationen


Präsentation zum Thema: "Datenparallele Algorithmische Skelette in Muesli"—  Präsentation transkript:

1 Datenparallele Algorithmische Skelette in Muesli
Dominik Pfeiffer Münster, 31. Mai 2007

2 Gliederung Motivation Grundlegende Begriffe
Die Skelettbibliothek Muesli Beispielprogramm Zusammenfassung und Bewertung

3 Motivation Probleme in der parallelen Programmierung:
Synchronisation von Prozessen Deadlocks Starvation Mögliche Lösung des Problems: Von der Parallelität der Ausführung abstrahieren Auf einer höheren Ebene Funktionen zur parallelen Verarbeitung von Aufgaben und Daten bereitstellen Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

4 Gliederung Motivation Grundlegende Begriffe
Funktionen höherer Ordnung Partielle Applikationen Algorithmische Skelette Die Skelettbibliothek Muesli Beispielprogramm Zusammenfassung und Bewertung

5 Funktionen höherer Ordnung
Funktionen mit Funktionen als Parameter oder Rückgabewerte Gleichstellung von Funktionen und Werten Beispiel: map (funktion, [liste]) map wendet eine Funktion sukzessiv auf jedes Element einer Liste an Realisierung bspw. in C++ durch Funktionszeiger Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

6 Partielle Applikationen (1/2)
Anwendung von weniger Argumenten auf eine Funktion als erwartet werden Umwandeln dieser Funktion in neue Funktion mit nur noch den fehlenden Argumenten Anwendung beliebiger Werte auf restliche Argumente führt zum selben Ergebnis wie Auflösen der Ursprungsfunktion Lässt sich beliebig frei und tief verschachteln Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

7 Partielle Applikationen (2/2)
Realisierung durch die Hilfsfunktion curry() Beispiel: Ausgangsfunktion: map (funktion, [liste]) Hilfsfunktion: mult(x, y) Anwendung von curry() auf mult(x,y) mit dem Parameter 2 liefert mult2(y) Partielle Applikation: map(curry(mult)(2), [liste]) Ergebnis: Alle Elemente der Liste werden mit 2 multipliziert Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

8 Algorithmische Skelette (1/2)
Stellen ein Gerüst für bestimmte Operationen und Kommunikationsmuster bereit Verbergen die parallele Ausführung Vermeiden unnötige Spezialisierung Können in der sequentiellen Programmierung genutzt werden Kümmern sich um Low-Level-Probleme Deadlocks Starvation Synchronisation Implementierung unter Verwendung von: Polymorphismus Funktionen höherer Ordnung Partielle Applikationen Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

9 Algorithmische Skelette (2/2)
Taskparallele Skelette Teilen Probleme in sequentiell und parallel abzuarbeitende Aufgaben Datenparallele Skelette Führen Operationen auf verteilten Datenstrukturen aus Laufen intern parallel ab Rechenskelette Bearbeiten die Inhalte der verteilten Datenstruktur Kommunikationsskelette Versenden Daten Synchronisieren Prozesse Ändern die Verteilung der Partitionen auf einzelne Prozesse Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

10 Gliederung Motivation Grundlegende Begriffe
Die Skelettbibliothek Muesli Übersicht Verteilte Datenstrukturen Map ZipWith Fold Beispielprogramm Zusammenfassung und Bewertung

11 Übersicht Muesli ist eine Skelettbibliothek Implementierung
Algorithmische Skelette Verteilte Datenstrukturen Keine eigene Programmiersprache Implementierung C++ Interprozesskommunikation mit MPI Funktionen höherer Ordnung Partielle Applikationen Polymorphismus (Templates) Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

12 Verteilte Datenstrukturen (1/2)
Verteilte Datenstrukturen Array und Matrix Aufteilung in Partitionen Verteilung der Partitionen auf mehrere Prozesse Konstruktoren Größe der Matrix Größe der Partition Initialwert oder –funktion Hilfsfunktionen get set show Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

13 Verteilte Datenstrukturen (2/2)
Kommunikation ist nicht erforderlich Alle Prozesse führen den gleichen Code aus Partition wird anhand der ProzessID bestimmt Alle Prozesse haben die gleiche Datenbasis Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

14 Map (1/2) Rechenskelett Wendet eine Funktion sukzessiv auf jedes Element einer Datenstruktur an Die Anwendung kann parallel von jedem Prozess auf seiner Partition erfolgen Kommunikation ist nicht erforderlich Skelettdefinition in Muesli: DistributedMatrix<R> map (R (*f)(E)) Varianten DistributedMatrix<R> mapIndex(R (*f)(int,int,E)) void mapInPlace(E (*f)(E)) void mapIndexInPlace(E (*f)(int,int,E)) Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

15 Map (2/2) Beispiel Multiplikation aller Elemente der Matrix mit 2
Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

16 ZipWith (1/2) Rechenskelett Kombiniert zwei gleiche Datenstrukturen
Gleiche Größe der Matrix Gleiche Partitionierung Elementweise Kombination Kommunikation ist nicht erforderlich Skelettdefinition in Muesli: DistributedMatrix<R> zipWith ( const DistributedMatrix<E2>& b, R (*f)(E,E2)) Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

17 ZipWith (2/2) Beispiel: Kombination durch element-weise Multiplikation
& = Prozess 1 & = = Prozess 2 & Prozess 3 & = Prozess 4 = & Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

18 Fold (1/3) Rechenskelett Vereint alle Elemente einer Datenstruktur
Nacheinander Vereinigung jedes Elements mit dem bisherigen Zwischenergebnis Die Art der Vereinigung wird durch Parameter bestimmt: Assoziative Funktion f f erwartet 2 Parameter vom Typ der Elemente der Datenstruktur Ergebnis liegt danach bei jedem Prozess vor Ergebnis = f(Elem1, f(Elem2, … f(Elemn-1, Elemn)…)) Kommunikation erforderlich Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

19 Fold (2/3) Beispiel Schritt 1: Vereinigung der Elemente jeder lokalen Partition Schritt 2: Austausch der Zwischenergebnisse zwischen den Prozessen Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

20 Fold (3/3) Beispiel Skelettdefinition in Muesli:
Schritt 3: Vereinigung der Zwischenergebnisse durch jeden Prozess Skelettdefinition in Muesli: E fold (E (*f)(E,E)) Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

21 Gliederung Motivation Grundlegende Begriffe
Die Skelettbibliothek Muesli Beispielprogramm Hintergrund Programmablauf Implementierung Zusammenfassung und Bewertung

22 Hintergrund Beispielprogramm unter Verwendung der hier vorgestellten Skelette Anwendungskontext: Verschmelzen von zwei Übergangsmatrizen aus der Wahrscheinlichkeitstheorie Praktische Anwendung in der Physik bei der Beschreibung physikalischer Zustandsveränderungen Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

23 Programmablauf Erstellen zweier 4x4-Übergangsmatrizen
Matrix 1: Die ersten beiden Zeilen mit 0,5 und der Rest mit 0 belegt Matrix 2: Einheitsmatrix Kombinieren der Matrizen Berechnung der Summe aller Werte der Ergebnismatrix Die Werte müssen in der Summe 4 ergeben Stellt ansatzweise die Korrektheit der Vereinigung sicher Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

24 Implementierung (1/5) Initialisieren der Skelettbibliothek
InitSkeletons(argc, argv); Initialisieren der ersten Übergangsmatrix DistributedMatrix<double> m1(4,4,1,4); m1.mapIndexInPlace(&firsttwo); Hilfsfunktion firsttwo double firsttwo(const int a, const int b, const double d) { return (a == 0 || a == 1) ? 0.5 : 0; } m1= Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

25 Implementierung (2/5) Initialisieren der zweiten Übergangsmatrix
DistributedMatrix<double> m2(4,4,&identmx,1,4); Hilfsfunktion identmx double identmx(const int a, const int b) { return (a == b) ? 1 : 0; } Kombinieren der Matrizen m1.zipWithInPlace(m2,&combine); Hilfsfunktion combine double combine(const double a, const double b) { return ((a + b) / 2); m2= m1= Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

26 Implementierung (3/5) Berechnung der Summe aller Werte der Ergebnismatrix double sum = m1.fold(&add); Hilfsfunktion add double add(const double a, const double b) { return a + b; } Skelettbibliothek beenden TerminateSkeletons(); m1= Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

27 Implementierung (4/5) Vollständiger Quellcode (Teil 1)
#include "Skeleton.h" double firsttwo(const int a, const int b, const double d) { return (a == 0 || a == 1) ? 0.5 : 0;} double identmx(const int a, const int b) { return (a == b) ? 1 : 0;} double combine(const double a, const double b) { return ((a + b) / 2);} double add(const double a, const double b) { return a + b;} (…) Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

28 Implementierung (5/5) Vollständiger Quellcode (Teil 2)
int main(int argc, char **argv) { InitSkeletons(argc, argv); // Initialisieren der Skelette DistributedMatrix<double> M1(4, 4, 1, 4); // Initialisieren der Matrizen M1.mapIndexInPlace(&firsttwo); DistributedMatrix<double> M2(4, 4, &identmx, 1, 4); M1.zipWithInPlace(M2, &combine); // Kombinieren der Matrizen double sum = M1.fold(&add); // Summe der Werte bilden TerminateSkeletons(); // Skelettbibliothek beenden } Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

29 Gliederung Motivation Grundlegende Begriffe
Die Skelettbibliothek Muesli Beispielprogramm Zusammenfassung und Bewertung

30 Bewertung (Positiv) Abstraktion von Low-Level-Programmierung
Deadlocks, Starvation, Synchronisation Jedes Skelett als Funktion höherer Ordnung und als partielle Applikation verfügbar Einheitliche Namensgebung bei Endungen -Index -InPlace Programmierer kann weiterhin sequentiell arbeiten Nur noch Bereitstellen einer adäquaten problemspezifischen Funktion durch den Entwickler Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

31 Bewertung (Negativ) Anzahl beteiligter Prozesse muss Potenz zur Basis 2 sein Keine freie Partitionierung Größe der Partition muss Teiler der Größe der Datenstruktur sein Anzahl der Partitionen muss gleich Anzahl der Prozesse sein Alle Partitionen müssen gleich groß sein Keine automatische Partitionierung Mögliche Schwierigkeiten beim Kompilieren GNU Compiler G MPI 1.2.x Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

32 Zusammenfassung Algorithmische Skelette Muesli
Gerüst für die parallele Verarbeitung Hohes Abstraktionsniveau Effizient implementiert Polymorphismus, Funktionen höherer Ordnung und partielle Applikationen Nutzung wie bei sequentieller Programmierung möglich Muesli Keine eigene Programmiersprache, sondern Bibliothek Verteilte Datenstrukturen Array und Matrix Konstruktoren und Hilfsfunktionen Rechen- und Kommunikationsskelette Bereitstellen einer adäquaten problemspezifischen Funktion durch den Entwickler Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung

33 Vielen Dank für eure Aufmerksamkeit!

34 PermutePartition Kommunikationsskelett
Ändert die Verteilung der Partitionen auf die Prozesse Erwartet bijektive Funktionen als Parameter

35 Global vs. Lokal Wahl zwischen der Betrachtungsweise des Problems
Index der verteilten Datenstruktur Geeignet für die Lösung eines Problems im Gesamtzusammenhang Lokal Index der lokalen Partition Geeignet für Optimierungen Motivation – Grundlegende Begriffe – Die Skelettbibliothek Muesli – Beispielprogramm – Zusammenfassung


Herunterladen ppt "Datenparallele Algorithmische Skelette in Muesli"

Ähnliche Präsentationen


Google-Anzeigen