360 likes | 482 Views
Message Passing Interface (MPI). Julian Pascal Werra. Gliederungsübersicht. A. Motivation. B. Parallele und Verteilte Programmierung. C. MPI. D. Fazit. Gliederungsübersicht. A. Motivation. B. Parallele und Verteilte Programmierung. C. MPI. D. Fazit. Motivation. 1. Motivation.
E N D
Message Passing Interface (MPI) Julian Pascal Werra
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung C. MPI D. Fazit
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung C. MPI D. Fazit
Motivation 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Technische Fortschritte • Hardware ist günstiger geworden • Entwicklung von Hochgeschwindigkeits-Netzwerken (z.B. LAN) Entwicklung von Parallelrechnern • Warum MPI? • Je nach Parallelrechner kann Nachrichtenaustausch notwendig sein • MPI ist eine Spezifikation für Datenaustausch auf nachrichtengekoppelten Systemen
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung 1. Klassifizierung von Parallelrechnern 2. Verteilter und gemeinsamer Speicher C. MPI D. Fazit
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung 1. Klassifizierung von Parallelrechnern 2. Verteilter und gemeinsamer Speicher C. MPI D. Fazit
1. Motivation 3. MPI 4. Fazit Klassifizierung von Parallelrechnern 2. Parallele und … • SISD • Ein Prozessor mit einem Programmspeicher Einprozessorsysteme (klassische Von-Neumann-Architektur) • SIMD • Mehrere Prozessoren • Zugriff auf gemeinsamen Programm-/Datenspeicher Vektor- und Feldrechner Flynnsche Klassifikation
1. Motivation 3. MPI 4. Fazit Klassifizierung von Parallelrechnern 2. Parallele und … • MISD • Jeweils eigener Programm-, aber gemeinsamer Datenspeicher • Jeder Prozessor erhält das selbe Datum aus dem Datenspeicher wenig sinnvoll • MIMD • Jeweils eigener Programm-, aber gemeinsamer Datenspeicher • Jeder Prozessor erhält ein separates Datum alle Arten von Multicomputer-/Multiprozessorsystemen Flynnsche Klassifikation
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung 1. Klassifizierung von Parallelrechnern 2. Verteilter und gemeinsamer Speicher C. MPI D. Fazit
1. Motivation 3. MPI 4. Fazit Verteilter und gemeinsamer Speicher 2. Parallele und … • Gemeinsamer Speicher • shared memory machine (SMM) • Speicher kann zum Datenaustausch genutzt werden • Anwendungsgebiet für OpenMP • Verteilter Speicher • distributed memory machine (DMM) • Keine gemeinsame Datenablage, somit Zwang zum Nachrichtenaustausch • Anwendungsgebiet für MPI
1. Motivation 3. MPI 4. Fazit Verteilter und gemeinsamer Speicher 2. Parallele und … • Message Passing Programmiermodell • System der Klasse MIMD • Kollektion von Prozessoren • Je eigener Programmspeicher • Verteilter Speicher • Nachrichtenaustausch erfolgt über ein Netzwerk
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung C. MPI 1. Grundlagen 2. Prozessgruppen 3. Kommunikatoren 4. Einzeltransfer-Operationen 5. Globale Kommunikations-Operationen 6. Zeitmessung D. Fazit
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung C. MPI 1. Grundlagen 2. Prozessgruppen 3. Kommunikatoren 4. Einzeltransfer-Operationen 5. Globale Kommunikations-Operationen 6. Zeitmessung D. Fazit
Grundlagen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • MPI • Spezifikation, die den Nachrichtenaustausch auf verteilten Systemen beschreibt • Legt Programm-Bindings (Sprachkonstrukte) fest • Implementierungen für C und Fortran (mittlerweile auch Java) • Durch einheitliche Schnittstellen portabel • Versions-Historie • 1994 MPI-1 Standard • 1995 MPI-1.1 (Fehlerbereinigung) • 1997 MPI-1.2 (Fehlerbereinigung) • 1997 MPI-2 Standard (Erweiterung um dynamische Prozessverwaltung, parallele Ein/Ausgabe und einseitige Kommunikationsoperationen)
Grundlagen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Programmaufbau • Innerhalb eines Programms müssen MPI-Funktionen von MPI_Init und MPI_Finalize umschlossen sein • MPI_Init • Muss die erste aufgerufene MPI-Funktion sein • Veranlasst notwendige Vorbereitungen für den Einsatz von MPI • MPI_Finalize • Muss die letzte aufgerufene MPI-Funktion sein • Gibt reservierte Ressourcen wieder frei • Sorgt für eine saubere Umgebung (behandelt z.B. nicht zugestellte Nachrichten)
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung C. MPI 1. Grundlagen 2. Prozessgruppen 3. Kommunikatoren 4. Einzeltransfer-Operationen 5. Globale Kommunikations-Operationen 6. Zeitmessung D. Fazit
Prozessgruppen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Menge von geordneten Prozessen • Ein Prozess kann mehreren Gruppen angehören • MPI stellt Funktionen bereit für: • Vereinigung / Löschen • Schnitt- / Differenz- / Untermengenbildung • Anzahl der Prozesse / Bestimmung des Indizes des aufrufenden Prozesses • Gleichheitsprüfung zweier Gruppen • Das Kommunikationsumfeld einer Prozessgruppe nennt sich Kommunikationsgebiet
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung C. MPI 1. Grundlagen 2. Prozessgruppen 3. Kommunikatoren 4. Einzeltransfer-Operationen 5. Globale Kommunikations-Operationen 6. Zeitmessung D. Fazit
Kommunikatoren 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Treten nur in Verbindung mit einer Prozessgruppe auf • Lokale Darstellung eines Kommunikationsgebiets • Inter-Kommunikator: Kommunikation zwischen Gruppen • Intra-Kommunikator: Kommunikation innerhalb einer Gruppe • MPI stellt Funktionen bereit für: • Erzeugung • Duplizierung • Aufspaltung
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung C. MPI 1. Grundlagen 2. Prozessgruppen 3. Kommunikatoren 4. Einzeltransfer-Operationen 5. Globale Kommunikations-Operationen 6. Zeitmessung D. Fazit
Einzeltransfer-Operationen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Kommunikation zwischen zwei Prozessen (klassische Sender/Empfänger-Beziehung) • Sendeoperation MPI_Send • Empfangsoperation MPI_Recv • Misch-Operation MPI_Sendrecv • Beteiligte Prozesse rufen entsprechende Funktion auf
Einzeltransfer-Operationen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit #include <stdio.h> #include <string.h> #include “mpi.h” int main (int argc, char *argv[]) { int my_rank, source, dest, tag=0; char msg [20]; MPI_Status status; // MPI Initialisieren MPI_Init (&argc, &argv); // Eigenen Rang bestimmen MPI_Comm_rank (MPI_COMM_WORLD, &my_rank); // Der Prozess mit Rang 0 sendet eine Nachricht... if (my_rank == 0){ strcpy (msg, “Testnachricht”); MPI_Send (msg, strlen(msg)+1, MPI_Char, 1, tag, MPI_COMM_WORLD); } // ...und Prozess 1 empfängt sie if (my_rank == 1){ MPI_Recv (msg, 20, MPI_Char, 0, tag, MPI_COMM_WORLD, &status); } // MPI beenden MPI_Finalize(); }
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung C. MPI 1. Grundlagen 2. Prozessgruppen 3. Kommunikatoren 4. Einzeltransfer-Operationen 5. Globale Kommunikations-Operationen 6. Zeitmessung D. Fazit
Globale Kommunikations-Operationen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Kommunikation zwischen mehreren Prozessen • Beteiligte Prozesse rufen die gleiche Funktion mit ggf. unterschiedlichen Parametern auf • Welche Funktionalitäten können durch solche Funktionen abgedeckt werden? • Broadcast • Akkumulation • Gather (Unterschiedliche Daten sammeln) • Scatter (Unterschiedliche Daten verteilen) • Multi-Broadcast • Multi-Akkumulation • Totaler Austausch
Globale Kommunikations-Operationen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Broadcast • MPI_Bcast • Der Wurzelprozess beschickt die beteiligten Prozesse mit den selben Daten
Globale Kommunikations-Operationen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Akkumulation • MPI_Reduce • Der Wurzelprozess empfängt Daten von den beteiligten Prozessen • Auf diese Daten wendet er eine Reduktionsoperation an
Globale Kommunikations-Operationen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Gather • MPI_Gather • Der Wurzelprozess sammelt Daten von den beteiligten Prozessen
Globale Kommunikations-Operationen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Scatter • MPI_Scatter • Entspricht grundlegend einem Broadcast • Es kann aber an jeden Prozess eine separate Nachricht verschickt werden
Globale Kommunikations-Operationen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Multi-Broadcast • MPI_Allgather • Die beteiligten Prozesse beschicken sich gegenseitig mit Nachrichten • Jeder Prozess erhält jede versandte Nachricht • Kommt somit ohne ausgezeichneten Wurzelprozess aus
Globale Kommunikations-Operationen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Multi-Akkumulation • MPI_Allreduce • Entspricht einer Akkumulation gefolgt von einem Broadcast • Benötigt einen Wurzelprozess, der die Reduktionsoperation vornimmt
Globale Kommunikations-Operationen 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Totaler Austausch • MPI_Alltoall • Alle beteiligten Prozesse tauschen sich gegenseitig mit Nachrichten aus • Jeder Prozess erhält eine für ihn explizit bestimmte Nachricht
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung C. MPI 1. Grundlagen 2. Prozessgruppen 3. Kommunikatoren 4. Einzeltransfer-Operationen 5. Globale Kommunikations-Operationen 6. Zeitmessung D. Fazit
Zeitmessung 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • Typische Fragestellungen • Wie lange nimmt die Bearbeitung eines speziellen Problems in Anspruch? • Welcher Zeitvorteil ergibt sich durch zusätzliche Hardware? • Identifizierung und Quantifizierung von brachliegenden Ressourcen • MPI_Wtime liefert einen Zeitstempel • MPI_Wtick gibt die Genauigkeit von MPI_Wtimean. • Beispielcode • Differenz zwischen end und start ergibt benötigte Zeit in Sekunden: ... start = MPI_Wtime(); ...// zu messender Programmteil end = MPI_Wtime(); ...
Gliederungsübersicht A. Motivation B. Parallele und Verteilte Programmierung C. MPI D. Fazit
Fazit 1. Motivation 2. Parallele und … 3. MPI 4. Fazit • MPI ist Spezifikation zur Datenübertragung auf nachrichtengekoppelten Systemen • Die Kommunikation erfolgt über Kommunikatoren innerhalb von bzw. zwischen Prozessgruppen • Eine Kommunikation kann zwischen zwei (Einzeltransfer) oder mehreren (globaler Transfer) Prozessen stattfinden
Vortragender Thema Themensteller Betreuer Julian Pascal Werra Message Passing Interface (MPI) Im Rahmen des Seminars „Parallele und Verteilte Programmierung“ Prof. Dr. Herbert Kuchen Dipl.-Wirt.-Inform. Philipp Ciechanowicz Ende