View
14
Download
0
Category
Preview:
Citation preview
MPI – Message Passing Interface
Matus DobrotkaJan Lietz
25.5.2016Parallele und verteilte Algorithmen
2
MPI
● Ein Standard, der den Nachrichtenaustausch bei parallelen Berechnungen auf verteilten Computersystemen beschreibt
● MPI-Applikation – mehrere miteinander kommunizierende Prozesse, werden parallel gestartet
● Prozesse arbeiten an einem Problem, nutzen zum Datenaustausch Nachrichten – explizit von einem zum anderen Prozess geschickt werden
Parallele und verteilte Algorithmen
3
● Parallele MPI-Programme – PC-Clustern, dedizierte Parallelrechner
http
://w
ww
.ext
rem
etec
h.co
m/w
p-co
nten
t/up
load
s/20
12/0
4/cl
uste
r.jp
g
4
MPI - Kommunikation
● Punkt-zu-Punkt Kommunikation● Kollektive Kommunikation
Parallele und verteilte Algorithmen
5
Punkt-zu-Punkt Kommunikation
● Kommunikation zwischen 2 Prozessen● Sendeprozess übermittelt dabei Informationen
an einen Empfangsprozess ● Jede Sendeoperation - passende
Empfangsoperation● Tag-Parameter – identisch
Parallele und verteilte Algorithmen
6
Blockierendes Senden/Empfangen
● Einfachste Operationen für Punkt-zu-Punkt Kommunikation
● int MPI_Send (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)
● MPI_Send blockiert, bis der Sendepuffer wiederverwendet werden kann (d. h. die Nachricht vollständig übermittelt oder zwischengepuffert wurde)
Parallele und verteilte Algorithmen
7
● int MPI_Recv (void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status* status)
● MPI_Recv blockiert, bis die Nachricht vollständig empfangen wurde
Parallele und verteilte Algorithmen
8
● Effizienz paralleler Anwendung kann oftmals gesteigert werden – Kommunikation mit Berechnung überlappt und Wartezeiten vermeidet
● - > Kommunikationsoperation wird lediglich angestoßen
● Separate Funktion muss dann aufgerufen werden, um solche Operation zu beenden
● Beim Starten der Operation wird ein Request-Objekt erzeugt, mit dessen Hilfe auf die Beendigung dieser Operation geprüft oder gewartet werden kann.
Parallele und verteilte Algorithmen
Nichtblockierendes Senden/Empfangen
9
● int MPI_Isend (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request)
● request: Adresse der Datenstruktur, die Informationen zur Operation enthält
● int MPI_Irecv (void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request* request)
Parallele und verteilte Algorithmen
10
Gruppen und Kommunikatoren
● Prozesse lassen sich in Gruppen zusammenfassen
● Jeder Prozess – eindeutige Nummer – Rang (rank)
● Für den Zugriff auf eine Gruppe wird ein Kommunikator benötigt
● Kommunikator für die Menge aller Prozesse MPI_COMM_WORLD
Parallele und verteilte Algorithmen
11
Kollektive Kommunikation
● Mehr Prozessen müssen die gleiche Aufgabe auf gleichen/unterschiedlichen Daten erledigen
● MPI-Standard stellt hierzu viele helfende Funktionen bereit
● Sie erleichtern das Verteilen und Einsammeln der Daten
● Broadcast, Scatter, Gather, Allgather, All to all, ...
Parallele und verteilte Algorithmen
12
Broadcast
● Nachricht von einem Prozess an alle Prozessen (inkl. selbst), die zu der Gruppe gehören
● int MPI_Bcast(void* buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
Parallele und verteilte Algorithmen
13
Scatter
● Das Streuen (Verteilen) von Daten eines Prozesses an alle Prozesse, die zu der Gruppe gehören
● int MPI_Scatter(const void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
Parallele und verteilte Algorithmen
14
Gather
● Das Einsammeln der Daten aller beteiligten Prozessen
● int MPI_Gather(const void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
Parallele und verteilte Algorithmen
15
Allgather
● eine Variante von Gather-Operation, in der alle Prozesse der Gruppe die gleichen Daten empfängen
● int MPI_Allgather(const void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
Parallele und verteilte Algorithmen
16
All to all● der Gesamtaustausch
● Daten werden zwischen allen Prozessen ausgetauscht
● der i-te Teil des Sendebuffers - i-ten Prozess
● Daten von dem Prozess mit dem Rank j werden entsprechend an j-ter Stelle im Empfangsbuffer gespeichert.
● int MPI_Alltoall(const void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
Parallele und verteilte Algorithmen
17
MPI Implementierungen
● MPICH● MPICH2● LAM/MPI● Boost● MPJ Express● OpenMPI● ...
Parallele und verteilte Algorithmen
18
Quellen
● http://www.mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf
Parallele und verteilte Algorithmen
19
Jetzt etwas zu Mensch ärgere dich nicht
Parallele und verteilte Algorithmen
Recommended