Bulk Synchronous Parallel Computing

Slides:



Advertisements
Ähnliche Präsentationen
Einer der Dienste im Internet
Advertisements

Imperative Programmierung
Message Passing Interface (MPI)
der Universität Oldenburg
Datenparallele Algorithmische Skelette in Muesli
Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Leistung.
Objektorientierte Programmierung
Wiederholung Betriebssystem bietet eine Abstraktion der Hardware an:
PC-Cluster.
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
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
2. Kapitel: Komplexität und Komplexitätsklassen
Synonyme: Stapel, Keller, LIFO-Liste usw.
Enno Rehling und Roger Butenuth, Uni-GH Paderborn: Arminius: Software für Linux-basierte SCI-Cluster Arminius: Software für Linux-basierte SCI-Cluster.
HEINZ NIXDORF INSTITUT Universität Paderborn Fachbereich Mathematik/Informatik Algorithmische Probleme in Funknetzwerken IX Christian Schindelhauer
Java: Objektorientierte Programmierung
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
Java: Grundlagen der Sprache
SciAgents - Eine agentenbasierte Umgebung für verteilte wissenschaftliche Berechnungen Alexander StarkeSeminar Software Agenten
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
Seminar parallele Programmierung SS 2003
OpenMP Präsentation im Rahmen des Seminars
Vortrag im Rahmen des Seminars
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Imperative Programmierung
WIRTSCHAFTSINFORMATIK Westfälische Wilhelms-Universität Münster WIRTSCHAFTS INFORMATIK TotalView Debugger Vorgestellt von Marco Dyballa mail:
Zusammenfassung Vorwoche
Seminar: Architekturbeschreibungssprachen
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Random Heightmap on GPU
Duo- und Quad Prozessor-Architektur
Effiziente Algorithmen
Programmierung paralleler Algorithmen mit MPI
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
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.
Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz.
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Programmierung 1. Einführung Seite 1
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Systemsoftware und Betriebssysteme
Interprozess- kommunikation (IPC)
BMEVIEEA100 Grundlagen der Programmierung
Parallelisierung für Multiprozessor-Maschinen
Javelin Internet-based parallel computing using Java.
Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.
Arbeitsspeicher Eine Präsentation von - Namen wurden entfernt -
Parallele Algorithmen I Basistechniken
Vs Objektpufferung (caching) = dynamische, ad-hoc-Replikation einer Primärkopie: Zugriffswilliger beschafft sich temporär eine lokale Kopie cache.
Lisa Huber DHBW Mannheim
Multiprocessing mit OpenMPI Marius Albath. Vorlesung Betriebssysteme, Was ist OpenMPI Was ist OpenMPI OpenMPI Standard Setup OpenMPI Standard.
 Gegenstandsbereich der Testtheorie: Analyse der Charakteristika von Tests:  Güte von Tests.  Struktur von Tests.  Schwierigkeit von Tests.  Gruppenunterschiede.
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Von: Simon Lubberich Erstbetreuer:
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Implementieren von Klassen
Shared Memory Programmierung: Grundlagen
 Präsentation transkript:

Bulk Synchronous Parallel Computing Seminar Parallele Programmierung Michael Poldner

Motivation Sequentielle Rechner Grundlage: von Neumann-Modell Vorteil: Entkopplung von Hard- und Softwareentwicklung Parallele Rechner bis Ende 80er Jahre hardwareorientiert Problem: viele Architekturen; Software speziell für diese entwickelt, kaum übertragbar, schnell veraltet und teuer Ende 80er Jahre softwareorientierte Ansätze Ende 80er/Anfang 90er Jahre modellorientiert Ziel: Skalierbarkeit, Portabilität, Vorhersagbarkeit

Gliederung Berechnungsmodelle PRAM-Modell BSP-Modell Fazit

1. Berechnungsmodelle dienen zur Analyse von Algorithmen Bewertung unabhängig von Programmiersprache und bestimmten Rechner anhand eines Bewertungskriteriums Basis: einheitliches Rechnermodell - abstrahiert von konkreten Rechnerdetails - Angabe von wichtigen Merkmalen einer Klasse von Rechnern an, welche signifikanten Einfluss auf die Laufzeit von Algorithmen haben: z.B. Basisoperationen, Zeitpunkt der damit zusammen- hängenden Aktionen, Datenzugriff, Datenspeicherung

Random Access Machine Berechnungsmodell für sequentielle Rechner Im wesentlichen Random Access Memory von unbeschränkter Kapazität Speicherzelle speichert Wort beliebiger Größe Schreib-/Lesezugriffe in konstanter Zeit Recheneinheit führt arithmetische Operationen (+, -, *, /) in konstanter Zeit und unabhängig von Operandengröße aus

2. Parallel Random Access Machine Zur Analyse von parallelen Algorithmen Rechnermodell: - unbeschränkte Anzahl von Prozessoren - synchrone Ausführung des gleichen Programms - Prozessoren haben eigenen lokalen Speicher - Synchronisation über gemeinsamen globalen Speicher unbeschränkter Größe - lokaler/globaler Speicherzugriff in konstanter Zeit

Pi: Prozessoren Li: lokale Speicher Abbildung PRAM Gemeinsamer Speicher P1 P2 Pn ... L1 L2 Ln Pi: Prozessoren Li: lokale Speicher

Speicherzugriffskonflikte Problem: mehrere Prozessoren greifen auf gleiche Speicherzelle zu! Unterscheidung von PRAM-Varianten nach Art der Konfliktbehandlung: - Exclusive Read/Exclusive Write- PRAM - Concurrent Read/Exclusive Write- PRAM - Exclusive Read/Concurrent Write- PRAM - Concurrent Read/Concurrent Write- PRAM CR/EW-PRAM kommt Realität am nächsten

Speicherzugriffskonflikte Problem: gleichzeitige Schreibzugriffe (CW) unterschiedliche Varianten denkbar: - Common-CW: simultanes Schreiben erlaubt, wenn alle Prozessoren gleichen Wert schreiben - Arbitrary-CW: Schreiben darf zufällig ausgewählter Prozessor - Priority-CW: Prozessor mit höchster (niedrigster) Priorität darf schreiben

Bewertung von Algorithmen Kosten werden mit der Anzahl der benötigten PRAM-Schritte angegeben Jeder PRAM-Schritt besteht aus drei Teilschritten: - Lesen von Daten aus dem globalen Speicher - Ausführung einer einfachen binären Operation - Zurückschreiben eines Wertes in globalen Speicher Nach jedem Schritt: Synchronisation der Prozessoren (verursacht keine Kosten)

PRAM-Algorithmen Bestehen aus zwei Phasen: 1. Phase: Aktivieren der benötigten Prozessoren spawn (P1, P2, ... , Pn) 2. Phase: Ausführen der parallelen Berechnungen for all (Pi1, Pi2, ... , Piq){ // parallele Berechnungen } Identifikation der Prozessoren durch Nummer bzw. Index, der lokal zur Verfügung steht

Beispiel: Summenberechnung Aufgabe: Addition aller Werte in einem Array Ansatz: baumartige Verknüpfung 3 5 1 4 8 13

Ansatz ermöglicht Berechnung in (log n) Zeit! global int A[n]; global int j; spawn (P0, P1, … , Pn/2-1);   for all (Pi where 0  i  n/2-1 ) { for (j = 0; j < log n; j++) { if (i % 2j == 0 && 2i + 2j < n) { A[2i] = A[2i] + A[2i + 2j] }

Realisierbarkeit des PRAM-Modells beliebig viele simultane Zugriffe in konstanter Zeit durch aktuelle Speicherelemente nicht unterstützt Problem: vorgestelltes Modell nicht realisierbar! Lösung: globalen Speicher in mehrere Speichermodule aufteilen und über Verbindungsnetzwerk mit Prozessoren verbinden

Abb.: PRAM mit Verbindungsnetzwerk ... Sn Verbindungsnetzwerk P1 P2 Pn ... L1 L2 Ln Pi: Prozessoren Li: lokale Speicher Si: globale Speichermodule

Diskussion des PRAM-Modells Unrealistische Modellannahmen Zeitliche Verzögerungen bei Zugriff auf entfernte Speichermodule Zugriff auf lokalen Speicher schneller als auf globalen Speicher Kollisionen bei Speicherzugriff unberücksichtigt Speicherhierarchien unberücksichtigt Lokalität von Algorithmen unberücksichtigt Betrachtung der Synchronisation und deren Kommunikationskosten unberücksichtigt

Fazit Stark vereinfachende Annahmen Maschinenparameter eines realen PRAM-Rechners unberücksichtigt Pro - einfaches Programmiermodell - einfache Laufzeitanalysen möglich Contra - für realistische Abschätzung der Laufzeit von Algorithmen ungeeignet

3. Bulk Synchronous Parallel Modell Abstrakter Rechner mit verteiltem Speicher Jeder Prozessor verfügt über lokalen Speicher Prozessoren über Verbindungsnetzwerk untereinander verbunden Kommunikation im Punkt-zu-Punkt-Transfer Mechanismus zur Barrieresynchronisation

Pi: Prozessoren Li: lokale Speicher Abb.: BSP-Computer Verbindungsnetzwerk P1 P2 Pn L2 L1 Ln ... Pi: Prozessoren Li: lokale Speicher

BSP-Parameter Spezifikation der Performance eines BSP-Rechners p: Anzahl der (virtuellen) Prozessoren s: Prozessorgeschwindigkeit (#Berechnungsschritte pro Sekunde) l: Synchronisationslatenz (die Anzahl der Schritte, die eine Barrieresynchronisation benötigt) g: (Die Summe der lokalen Operationen, welche durch alle Prozessoren in einer Sekunde ausgeführt werden) / (Die Summe der Wörter, welche in einer Sekunde über das Netzwerk verschickt werden)

BSP-Parameter Parameter l beeinflusst von: - Netzwerklatenz - Durchmesser des Verbindungsnetzwerks Untergrenze durch Hardware festgelegt Zeitspanne zwischen zwei Synchronisationsoperationen kann dynamisch zur Laufzeit variieren

BSP-Parameter Parameter g Bezieht sich auf die Häufigkeit mit welcher nicht lokale Speicherzugriffe realisiert werden können Stellt Bandbreite des Netzwerks dar, die angibt, wie viele Operationen in der Zeit ausgeführt werden können, die das Verschicken eines Worts benötigt Abhängig von: - Bisektionsbandbreite des Netzwerks - Kommunikationsprotokoll - Kommunikationsbibliothek

Superschritte Berechnung erfolgt in Folge von Superschritten Ein Superschritt besteht aus drei Phasen: - Berechnungsphase - Kommunikationsphase - Synchronisationsphase

Abb.: Superschritt P1 P2 P3 Pn-1 Pn Berechnungsphase (virtuelle) Prozessoren P1 P2 P3 Pn-1 Pn Berechnungsphase Kommunikationsphase Barrieresynchronisation Synchronisationsphase Zeit

Berechnungsphase Ausführung von Operationen nur in dieser Phase erlaubt Operationen arbeiten auf lokal gehaltene Daten, welche zu Beginn des Superschritts verfügbar waren Mehrere Berechnungsschritte durchführbar Kommunikation in dieser Phase nicht erlaubt Dauer L der Berechnungsphase: Ausführungszeit des Prozessors mit längster lokaler Berechnung

Kommunikationsphase Nicht lokale Schreib-/Leseanfragen über Senden/Empfangen von Nachrichten realisiert Kommunikation durch h-Relation beschreibbar (Prozessor darf max. h Nachrichten senden und max. h Nachrichten empfangen) Annahme: Nachricht besteht aus m Wörtern Kosten der Kommunikation: m * g * h Schritte Zwei Kommunikationsmodi: Direct Remote Memory Access (DRMA) Bulk Synchronous Message Passing (BSMP)

Direct Remote Memory Access Idee: Stelle lokale Variable/Datenstruktur für globalen Zugriff zur Verfügung Dazu: Registrierungsmechanismus Setzen und Aufheben der globalen Verfügbarkeit über die Operationen bsp_push_reg, bsp_pop_reg Zugriff auf registrierte Datenstrukturen und Variablen über bsp_get, bsp_put Effekt erst im nächsten Superschritt wirksam!

Bulk Synchronous Message Passing Idee: Schicke Nachrichten an Warteschlange eines Prozessors Schreiben über bsp_send, Auslesen über bsp_move Weitere Operationen zur Ermittlung der Anzahl und Größe der Pakete in der Warteschlange Gewährleistung: Nachrichten erreichen ihr Ziel vor Beginn des nächsten Superschritts Effekt erst im nächsten Superschritt wirksam!

DRMA vs. BSMP DRMA wird benutzt, wenn jedem Prozess die Existenz der nicht lokalen Speicherbereiche bekannt ist. BSMP eignet sich für Probleme, bei denen nur der Nachrichtenempfänger Kenntnis über genauen Speicherort ankommender Daten hat.

Synchronisationsphase Prozess beendet Kommunikationsphase durch bsp_sync Prozess wartet, bis alle Nachrichten ihr Ziel erreicht haben Danach: alle Prozessoren starten gemeinsam nächsten Superschritt Barrieresynchronisation Parameter l gibt Dauer der Synchronisation an

Bewerten von Algorithmen Annahme: Zugriff auf nicht lokale Speicher einheitlich effizient Kosten eines Superschritts: TSuperschritt = L + m * g * h + l Kosten eines BSP-Algorithmus: Summe der Ausführungszeiten seiner benötigten Superschritte

BSPlib-Programmierung BSPlib ist weit verbreitete BSP-Bibliothek für C, C++, Fortran weitere: PUB, JBSP, ... 20 Basisoperationen Stellt Infrastruktur zur Verteilung der Daten und zur Kommunikation bereit Programmierung ist plattformunabhängig Adoptiert das Single Program Multiple Data (SPMD)-Programmiermodell

SPMD-Programme Aufgabe: Abbilden eines Problems, welches eine Datenstruktur der Größe n manipuliert, auf p Instanzen eines Programms, so dass jedes Programm n/p große Blöcke der ursprünglichen Datenstruktur bearbeitet.

Starten und Beenden von SPMD-Code Starten und Beenden von Prozessen über: void bsp_begin(int maxprocs); void bsp_end(void); Nur ein bsp_begin / bsp_end-Paar pro Programm Der durch diese Operationen eingeschlossene Code wird auf mehreren Prozessoren ausgeführt Alternativen: - reine SPMD-Weise - Simulation dynamischer Prozesse

Starten und Beenden von SPMD-Code Reine SPMD-Berechnung: bsp_begin und bsp_end sind erste und letzte Anweisung im Programm void main(void) { bsp_begin(bsp_nprocs()); printf(„Hello BSP Worldwide from %d of %d\n“,bsp_pid(), bsp_nprocs()); bsp_end(); }

Simulation dynamischer Prozesse Prozesse dynamisch zur Laufzeit erzeugen Problem: nicht alle parallelen Maschinen unterstützen dynamische Prozesserzeugung Simulation über bsp_init-Operation Idee: SPMD-Teil des Programms in Methode kapseln

int nprocs; // globale Variable void spmd_part(void) { bsp_begin(nprocs); printf(„Hello BSP Worldwide from %d of %d\n“, bsp_pid(), nprocs); bsp_end(); } void main(int argc, char *argv[]) { bsp_init(spmd_part, argc, argv); nprocs = readInteger(); spmd_part();

Stoppen der Programmausführung Anhalten aller Prozesse über void bsp_abort(char *format...); Format entspricht dem des printf-Befehls Ausgabe einer Fehlermeldung möglich Effekt dieser Operation tritt sofort ein: Keine Barrieresynchronisation notwendig

Lokale Abfragefunktionen Abfragefunktionen erfordern keine Kommunikation zwischen den Prozessen Liefern Informationen über: - Anzahl beteiligter paralleler Prozesse, - ProzessID eines Prozesses - vergangene Zeit in Sekunden seit bsp_begin Abfragefunktionen in BSPlib: int bsp_nprocs(void); int bsp_pid(void); double bsp_time(void);

Bsp.: DRMA-Kommunikation Syntax der benötigten Operationen: void bsp_push_reg(const void *ident, int size); void bsp_pop_reg(const void *ident); void bsp_put(int pid, const void *src, void *dst, int offset, int nbytes);

DRMA-Kommunikation int reverse(int x) { // registriere x für DRMA-Zugriff bsp_push_reg(&x, sizeof(int)); bsp_sync(); // transferiere x bsp_put(bsp_nprocs()-bsp_pid()-1, &x, &x, 0, sizeof(int)); // hebe DRMA-Registrierung auf bsp_pop_reg(&x); return x; }

Diskussion des BSP-Modells Kritikpunkt Oft großer Overhead durch Versenden kleiner Nachrichten - Zusammenstellen von Nachrichten - Header (vgl. TCP/IP-Protokollstack) Lösung: BSP*-Modell im BSP*-Modell: zusätzlicher Parameter B B gibt minimale Nachrichtengröße an, mit welcher Kommunikation effizient abläuft

Kritikpunkte - kein paralleles Ausführen von verschiedenen Algorithmen - Lokalität im Modell unberücksichtigt Lösung: D-BSP-Modell Erlaubt Partitionierung des BSP-Computers in autonome Teilcomputer Problematisch: Laufzeit von BSP-Algorithmen abhängig von BSP-Parametern und Hardware Algorithmus sorgfältig auswählen

Vorteile BSP-Bibliotheken bieten: - Plattformunabhängigkeit - hohe Portabilität und Skalierbarkeit Im Vergleich zur PRAM: - wenig Kommunikation - seltene Synchronisation Keine Deadlocks möglich, da Berechnung und Kommunikation entkoppelt

BSP in der Praxis Auswertung von reinfunktionalen Sprachen Reinfunktionale Sprachen sind nebeneffektfrei haben keine Zustandsvariablen parallele Auswertung von Teilausdrücken möglich z.B. BSMLlib: BSP-Bibliothek zur Auswertung von CAML-Programmen (u.a. von Frédéric Loulergue) Wissenschaftliche Berechnungen z.B. in der Luft- und Raumfahrt: Simulation von Luftströmen

4. Fazit PRAM-Modell: - einfaches Programmiermodell - Schwächen bei Laufzeitanalyse von parallelen Algorithmen - Performanceeinbußen durch hohen Kommunikations- und Synchronisationsbedarf BSP-Modell: - einfaches Programmiermodell - geringer Kommunikations- und Synchronisationsbedarf - hohe Skalierbarkeit, Portabilität und Vorhersagbarkeit