Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Kollektive Operationen Oswald Haan

Ähnliche Präsentationen


Präsentation zum Thema: "GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Kollektive Operationen Oswald Haan"—  Präsentation transkript:

1 GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Kollektive Operationen Oswald Haan

2 Kollektive Operationen - Überblick Kollektive Operationen werden von allen Tasks eines Kommunikators (z.B. MPI_COMM_WORLD) aufgerufen Intra-Kommunikator: alle Tasks gehören zu einer Gruppe Inter-Kommunikator: die Tasks bilden zwei getrennte Gruppen MPI_COMM_WORLD ist ein Intra-Kommunikator Kollektive Operationen können blockierend sein (z.B. MPI_BARRIER) oder je nach Implementierung blockierend oder nichtblockierend Parallelrechner-Programmierung mit MPI207. –

3 Klassifizierung der Kollektive Operationen Parallelrechner-Programmierung mit MPI307. –

4 Kollektive Operationen: Datenfluss Parallelrechner-Programmierung mit MPI407. –

5 Kollektive Operationen: Datenfluss Parallelrechner-Programmierung mit MPI507. – alltoall

6 MPI_BARRIER: Synchronisation Parallelrechner-Programmierung mit MPI607. – MPI_BARRIER( comm ) IN comm communicator (handle) MPI_BARRIER muss von allen Tasks des Kommunikators comm aufgerufen werden. Der Aufruf von MPI_BARRIER endet erst, wenn alle Tasks den Aufruf abgesetzt haben.

7 MPI_BCAST: Broadcast Parallelrechner-Programmierung mit MPI707. – MPI_BCAST( buffer, count, datatype, root, comm ) INOUT buffer starting address of buffer (choice) IN count number of entries in buffer (non-negative integer) IN datatype data type of buffer (handle) IN root rank of broadcast root (integer) IN comm communicator (handle) Alle Tasks müssen die gleichen Werte für root und comm angeben, die durch count und datatype festgelegte Datenmenge muss bei allen Tasks übereinstimmen

8 MPI_GATHER: Sammeln auf root Parallelrechner-Programmierung mit MPI807. – MPI_GATHER( sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm) IN sendbuf starting address of send buffer (choice) IN sendcount number of elements in send buffer (non-negative integer) IN sendtype data type of send buffer elements (handle) OUT recvbuf address of receive buffer (choice, significant only at root) IN recvcount number of elements for any single receive (non-negative integer, significant only at root) IN recvtype data type of recv buffer elements (handle,significant only at root) IN root rank of receiving process (integer) INcomm communicator (handle)

9 MPI_GATHER: Sammeln auf root Parallelrechner-Programmierung mit MPI907. – Alle Tasks müssen die gleichen Werte für root und comm angeben die durch sendcount und sendype festgelegte Datenmenge muss bei allen Tasks mit der auf dem root- Task durch recvcount und recvtype festgelegten Datenmenge übereinstimmen Der recv-Buffer wird auf allen nicht-root Tasks ignoriert Task 0 Task 1 (root) Task 2 sendbuf recvbufbuf sendbuf recvbufbuf Vor MPI_GATHERNach MPI_GATHER

10 MPI_GATHER: mit MPI_IN_PLACE auf root Parallelrechner-Programmierung mit MPI1007. – nicht-root-Task MPI_GATHER( sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm) root-Task MPI_GATHER(MPI_IN_PLACE, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm) Task 0 Task 1 (root) Task 2 sendbuf recvbufbuf Vor MPI_GATHERNach MPI_GATHER sendbuf recvbufbuf

11 MPI_GATHERV: Sammeln auf root Parallelrechner-Programmierung mit MPI1107. – MPI_GATHERV( sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root,comm) IN sendbuf starting address of send buffer (choice) IN sendcount number of elements in send buffer (non-negative integer) IN sendtype data type of send buffer elements (handle) OUT recvbuf address of receive buffer (choice, significant only at root) IN recvcounts non-negative integer array (of length group size) containing the number of elements that are received from each process (significant only at root) IN displs integer array (of length group size). Entry i specifies the displacement relative to recvbuf at which to place the incoming data from process i (significant only at root) IN recvtype data type of recv buffer elements (handle,significant only at root) IN root rank of receiving process (integer) IN comm communicator (handle)

12 MPI_GATHERV : Sammeln auf root Parallelrechner-Programmierung mit MPI1207. – die durch sendcount und sendype festgelegte Datenmenge auf Task i muss mit der auf dem root-Task durch recvcounts(i) und recvtype festgelegten Datenmenge übereinstimmen Die Daten von Task i werden mit dem Abstand displs(i) Elemente vom Typ recvtype von der Adresse recvbuf gespeichert Der recv-Buffer wird auf allen nicht-root Tasks ignoriert Task 0 Task 1 (root) Task 2 sendbuf recvbufbuf sendbuf recvbufbuf Vor MPI_GATHERVNach MPI_GATHERV

13 MPI_SCATTER: Verteilen von root Parallelrechner-Programmierung mit MPI1307. – MPI_SCATTER( sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm) IN sendbuf address of send buffer (choice, significant only at root) IN sendcount number of elements sent to each process (non-negative integer, significant only at root) IN sendtype data type of send buffer elements (handle, significant only at root) OUT recvbuf address of receive buffer (choice) IN recvcount number of elements in receive buffer (non-negative integer) IN recvtype data type of receive buffer elements (handle) IN rootrank of sending process (integer) IN comm communicator (handle)

14 MPI_SCATTER: Verteilen von root Parallelrechner-Programmierung mit MPI1407. – Alle Tasks müssen die gleichen Werte für root und comm angeben die durch recvcount und recvtype festgelegte Datenmenge muss bei allen Tasks mit der auf dem root- Task durch sendcount und sendtype festgelegten Datenmenge übereinstimmen Der send-Buffer wird auf allen nicht-root Tasks ignoriert Task 0 Task 1 (root) Task 2 sendbufrecvbufbufsendbufrecvbufbuf Vor MPI_SCATTERNach MPI_SCATTER

15 MPI_ALLGATHER: Sammeln auf alle Tasks Parallelrechner-Programmierung mit MPI1507. – MPI_ALLGATHER( sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm) IN sendbuf starting address of send buffer (choice) IN sendcount number of elements in send buffer (non-negative integer) IN sendtype data type of send buffer elements (handle) OUT recvbuf address of receive buffer (choice) IN recvcount number of elements received from any process (nonnegative integer) IN recvtype data type of receive buffer elements (handle) IN comm communicator (handle)

16 MPI_ALLGATHER: Sammeln auf root Parallelrechner-Programmierung mit MPI1607. – Alle Tasks müssen die gleichen Werte für comm angeben die durch sendcount und sendype festgelegte Datenmenge muss bei allen Tasks mit der durch recvcount und recvtype festgelegten Datenmenge übereinstimmen Task 0 Task 1 Task 2 sendbuf recvbufbuf sendbuf recvbufbuf Vor MPI_ALLGATHERNach MPI_ALLGATHER

17 MPI_ALLGATHER mit MPI_IN_PLACE Parallelrechner-Programmierung mit MPI1707. – MPI_ALLGATHER(MPI_IN_PLACE, sendcount, sendtype, recvbuf, recvcount,recvtype, comm) Task 0 Task 1 Task 2 sendbuf recvbufbuf sendbuf recvbufbuf Vor MPI_ALLGATHERNach MPI_ALLGATHER

18 MPI_ALLGATHERV: Sammeln auf alle Tasks Parallelrechner-Programmierung mit MPI1807. – MPI_ALLGATHERV( sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs,recvtype, comm) IN sendbuf starting address of send buffer (choice) IN sendcount number of elements in send buffer (non-negative integer) IN sendtype data type of send buffer elements (handle) OUT recvbuf address of receive buffer (choice) IN recvcounts non-negative integer array (of length group size) containing the number of elements that are received from each process (significant only at root) IN displsinteger array (of length group size). Entry i specifies the displacement relative to recvbuf at which to place the incoming data from process i IN recvtype data type of receive buffer elements (handle) IN comm communicator (handle)

19 MPI_ALLTOALL: Sammeln und Verteilen Parallelrechner-Programmierung mit MPI1907. – MPI_ALLTOALL(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm) IN sendbuf starting address of send buffer (choice) INsendcount number of elements sent to each process (non-negative integer) IN sendtype data type of send buffer elements (handle) OUTrecvbuf address of receive buffer (choice) IN recvcount number of elements received from any process (nonnegative integer) IN recvtype data type of receive buffer elements (handle) IN comm communicator (handle)

20 0 MPI_ALLTOALL: Sammeln und Verteilen Parallelrechner-Programmierung mit MPI2007. – Alle Tasks müssen die gleichen Werte für comm angeben die durch sendcount und sendype festgelegte Datenmenge muss bei allen Tasks gleich sein und mit der durch recvcount und recvtype festgelegten Datenmenge übereinstimmen 0 12 Task 0 Task 1 Task 2 sendbuf 1 11 recvbufbuf Vor MPI_ALLTOALLNach MPI_ALLTOALL

21 Reduktions-Operationen Parallelrechner-Programmierung mit MPI2107. – Operationen, die Daten von allen Tasks zu einem einzigen Ergebnis verarbeiten, wie Summe, Minimum etc. Vordefinierte oder eigene Operationen möglich MPI_REDUCE: Ergebnis wird auf root gespeichert MPI_ALLREDUCE: Ergebnis wird auf allen Tasks gespeichert MPI_REDUCE_SCATTER, MPI_REDUCE_SCATTER_BLOCK: n Ergebnisse werden auf n Tasks verteilt MPI_SCAN, MPI_EXSCAN: Partielle Ergebnisse werden auf die Tasks verteilt

22 Vordefinierte Reduktions-Operationen Parallelrechner-Programmierung mit MPI2207. – Name Meaning MPI_MAX maximum MPI_MIN minimum MPI_SUM sum MPI_PROD product MPI_LAND logical and MPI_BAND bit-wise and MPI_LOR logical or MPI_BOR bit-wise or MPI_LXOR logical exclusive or (xor) MPI_BXOR bit-wise exclusive or (xor) MPI_MAXLOC max value and location MPI_MINLOC min value and location

23 A0 op A0 op A0 A1 op A1 op A1 Reduktions-Operationen Parallelrechner-Programmierung mit MPI2307. – MPI_REDUCE( sendbuf, recvbuf, count, datatype, op, root, comm) IN sendbuf address of send buffer (choice) OUT recvbuf address of receive buffer (choice, significant only at root) IN count number of elements in send buffer (non-negative integer) IN datatype data type of elements of send buffer (handle) IN op reduce operation (handle) IN root rank of root process (integer) IN comm communicator (handle) Task 0 Task 1 (root) Task 2 sendbuf recvbufbuf A0 A1

24 A0 op A0 op A0 A1 op A1 op A1 Reduktions-Operationen Parallelrechner-Programmierung mit MPI2407. – MPI_ALLREDUCE( sendbuf, recvbuf, count, datatype, op, comm) Task 0 Task 1 Task 2 sendbuf recvbufbuf A0 A1 A0 op A0 op A0 A1 op A1 op A1

25 Reduktions-Operationen Parallelrechner-Programmierung mit MPI2507. – MPI_REDUCE_SCATTER( sendbuf, recvbuf, recvcounts, datatype, op, comm) IN sendbuf starting address of send buffer (choice) OUT recvbuf starting address of receive buffer (choice) IN recvcounts non-negative integer array (of length group size) specifying the number of elements of the result distributed to each process. IN datatype data type of elements of send and receive buffers (handle) IN op operation (handle) IN comm communicator (handle)

26 A0 A1 A2 A3 A4 A5 Max(A2, A2,A2 ) Max(A3, A3,A3) Reduktions-Operationen Parallelrechner-Programmierung mit MPI2607. – MPI_REDUCE_SCATTER_BLOCK( sendbuf, recvbuf, recvcount, datatype, op, comm) z.B. recvcount = 2, op = MPI_MAX Task 0 Task 1 Task 2 sendbuf recvbufbuf Max(A0, A0,A0) Max(A1, A1,A1) Max(A4, A4,A4) Max(A5, A5,A5)A0 A1 A2 A3 A4 A5

27 A0 op A0 A1 op A1 Reduktions-Operationen Parallelrechner-Programmierung mit MPI2707. – MPI_SCAN( sendbuf, recvbuf, count, datatype, op, comm) Task 0 Task 1 Task 2 sendbuf recvbufbuf A0 A1 A0 op A0 op A0 A1 op A1 op A1


Herunterladen ppt "GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Kollektive Operationen Oswald Haan"

Ähnliche Präsentationen


Google-Anzeigen