19
MPI – Message Passing Interface Matus Dobrotka Jan Lietz 25.5.2016 Parallele und verteilte Algorithmen

MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

  • Upload
    others

  • View
    21

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

MPI – Message Passing Interface

Matus DobrotkaJan Lietz

25.5.2016Parallele und verteilte Algorithmen

Page 2: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 3: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 4: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

4

MPI - Kommunikation

● Punkt-zu-Punkt Kommunikation● Kollektive Kommunikation

Parallele und verteilte Algorithmen

Page 5: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 6: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 7: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 8: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 9: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 10: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 11: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 12: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 13: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 14: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 15: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 16: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

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

Page 17: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

17

MPI Implementierungen

● MPICH● MPICH2● LAM/MPI● Boost● MPJ Express● OpenMPI● ...

Parallele und verteilte Algorithmen

Page 18: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

18

Quellen

● http://www.mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf

Parallele und verteilte Algorithmen

Page 19: MPI – Message Passing Interface · MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) Parallele und verteilte Algorithmen. 16 All to all

19

Jetzt etwas zu Mensch ärgere dich nicht

Parallele und verteilte Algorithmen