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

Slides:



Advertisements
Ähnliche Präsentationen
Message Passing Interface (MPI)
Advertisements

C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
Herzlich Willkommen zum Informations-Forum: SAP Interoperabilität
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
2.4 Kommunikationsdienste des Betriebssystems
Art der Arbeit (Projekt-/Studien-/Diplomarbeit/
Teilprojekt A4 Entwicklung neuartiger Werkzeugkonzepte für das Tiefziehen: Simulation und Prozessführung Motivation Modellierung des makroskopischen.
Telling Time in German Deutsch 1 Part 1 Time in German There are two ways to tell time in German. There are two ways to tell time in German. Standard.
DVG Felder1 Felder. DVG Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x.
Lanes – Ein Overlay zur Dienstsuche in Ad-hoc- Netzen.
16 Kostenrechnung
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Punkt-zu-Punkt-Kommunikation Oswald Haan
Institut AIFB, Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Towards Automatic Composition of Processes based on Semantic.
Ich möchte ein Eisberg sein. Last time … 3 icebergs Triangels Unique connections Ich möchte ein Eisberg sein
Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy.
Einführung in die Programmierung
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Allgemeine Datentypen Oswald Haan
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Kollektive Operationen Oswald Haan
GWDG – Kurs Parallelrechner-Programmierung mit MPI – Oswald Haan
Einer wird gewinnen! (one will win!) The game is played in pairs or in 2 groups. You can pick any square and click on it. When you have finished with your.
You need to use your mouse to see this presentation © Heidi Behrens.
Signal-Prozessoren DSV1, 2009, Hhrt, 1 Mikro-Prozessor Von Neumann-Architektur Daten und Programmcode im gleichen Speicher => Sequenzieller Zugriff auf.
Dynamische Datentypen
Oswald Haan GWDG – Kurs Parallelrechner-Programmierung mit MPI Grundlagen der Parallelverarbeitung Oswald Haan
Travelling Salesman Problem (TSP)
C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern.
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Kollektive Operationen Oswald Haan
Fachhochschule München, Projektstudium Chipkarten SS DataLayer Command APDU Response APDU Java Card Bereich der DataLayer Gruppe GUI GruppeTreiber.
Universität StuttgartInstitut für Wasserbau, Lehrstuhl für Hydrologie und Geohydrologie Copulas (1) András Bárdossy IWS Universität Stuttgart.
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Kollektive Operationen Oswald Haan
Prüfungen neu. Änderungen Probesystem 4 Prüfungen pro Schuljahr Jeweils ganze Lektion, keine Fragemöglichkeit am Anfang der Prüfungslektion Taschenrechner.
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Punkt-zu-Punkt-Kommunikation Oswald Haan
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Kollektive Operationen Oswald Haan
You need to use your mouse to see this presentation © Heidi Behrens.
C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern.
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Einführung Oswald Haan
Sprachneuerungen des .NET Frameworks 3.5
Lust auf Lesen Treffpunkt Deutsch Sixth Edition. Relative Pronoun object of a preposition Recall from chapter 9 that relative clauses describe people,
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Punkt-zu-Punkt-Kommunikation Oswald Haan
Synchronization: Multiversion Concurrency Control
You need to use your mouse to see this presentation © Heidi Behrens.
Experimental design. Variables Independent variable Dependent variable Levels Responses.
Nachweis von B 0 s -Oszillationen mit dem ATLAS Detektor am LHC B. Epp 1, V.M. Ghete 2, E. Kneringer 1, D. Kuhn 1, A. Nairz 3 1 Institut für Experimentalphysik,
Rules of Play - Game Design Fundamentals by Katie Salen and Eric Zimmerman Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung.
Lehrstuhl für Informatik 3 - D. Fey Vorlesung GRa - SS , Folie 1 Beispiel Cache-Architektur.
Museumsinsel Museum Island (German: Museumsinsel) is the name of the northern half of an island in the Spree river in the central Mitte district of Berlin,
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Kollektive Operationen Oswald Haan
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Punkt-zu-Punkt-Kommunikation Oswald Haan
Common mistakes Morgen habe Ich das buch für dich. Nouns are capitalized + the formal form of address Morgen habe ich das Buch für dich. Jetzt, ich wohne.
Probesystem Gym 4 Prüfungen pro Schuljahr, in der 2. Klasse 4 ½ Prüfungen. Jeweils ganze Lektion, keine Fragemöglichkeit am Anfang der Prüfungslektion.
PVM – Parallel Virtual Machine Michael Springmann.
Kapitel 4 Grammar INDEX 1.Ordinal Numbers 2.Relative Pronouns and Relative Clauses 3.Conditional Sentences 4.Posessive: Genitive Case.
Kapitel 2 Grammar INDEX 1.Subjects & Verbs 2.Conjugation of Verbs 3.Subject Verb Agreement 4.Person and Number 5.Present Tense 6.Word Order: Position of.
Here‘s what we‘ll do... Talk to the person sitting in front of you. Introduce each other, and ask each other questions concerning the information on your.
EUROPÄISCHE GEMEINSCHAFT Europäischer Sozialfonds EUROPÄISCHE GEMEINSCHAFT Europäischer Fonds für Regionale Entwicklung Workpackage 5 – guidelines Tasks.
Gießen, Textmapping am Beispiel des Leseverstehens Dr. Claudia Harsch IQB Berlin
On the case of German has 4 cases NOMINATIVE ACCUSATIVE GENITIVE DATIVE.
© Goethe-Institut London 2017
„E!DI“ – EUREKA Danube Initiative
Synonyms are two or more words belonging to the same part of speech and possessing one or more identical or nearly identical denotational meanings, interchangeable.
IETF 80 Prague DISPATCH WG
Telling Time in German Deutsch 1 Part 1.
The new online recognition process
Bezeichnung des Anlasses mit Datum bzw Geschäft / Vorhaben
CSL211 Computer Architecture
DATIV Ich schreibe meinem Bruder einen Brief.
Arrays of Objects, a 3 part process
- moodle – a internet based learning platform
 Präsentation transkript:

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

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. –

Klassifizierung der Kollektive Operationen Parallelrechner-Programmierung mit MPI307. –

Kollektive Operationen: Datenfluss Parallelrechner-Programmierung mit MPI407. –

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

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.

Synchronisation mit mpi4py Parallelrechner-Programmierung mit MPI707. – comm.Barrier( ) IN comm communicator e.g. MPI.COMM_WORLD 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.

MPI_BCAST: Broadcast Parallelrechner-Programmierung mit MPI807. – 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

Broadcast mit mpi4py Parallelrechner-Programmierung mit MPI907. – robj = comm.bcast(sobj, root= 0) OUT robj python object to be received on all tasks IN comm communicator e.g MPI:COMM_WORLD IN sobj python object to be sent from root IN root rank of broadcast root (integer) comm.Bcast(ar, root= 0) IN comm communicator e.g MPI:COMM_WORLD INOUT ar numpy array to be sent from root and to be received on all tasks IN root rank of broadcast root (integer)

MPI_GATHER: Sammeln auf root Parallelrechner-Programmierung mit MPI1007. – 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)

Sammeln auf root mit mpi4py Parallelrechner-Programmierung mit MPI1107. – robj = comm.gather(sendobj = sobj, recvobj=None, root= 0) INcomm communicator e.g. MPI:COMM_WORLD IN sobj python object to be sent OUT robj python object for gathered elements (significant only at root) IN root rank of receiving process (integer) comm.Gather(sar, rar, root= 0) INcomm communicator e.g. MPI:COMM_WORLD IN sar numpy array to be sent OUT rar numpy array for gathered elements (significant only at root) IN root rank of receiving process (integer)

MPI_GATHER: Sammeln auf root Parallelrechner-Programmierung mit MPI1207. – 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

MPI_GATHER: mit MPI_IN_PLACE auf root Parallelrechner-Programmierung mit MPI1307. – 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

MPI_GATHERV: Sammeln auf root Parallelrechner-Programmierung mit MPI1407. – 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)

MPI_GATHERV : Sammeln auf root Parallelrechner-Programmierung mit MPI1507. – 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

MPI_SCATTER: Verteilen von root Parallelrechner-Programmierung mit MPI1607. – 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)

Verteilen von root mit mpi4py Parallelrechner-Programmierung mit MPI1707. – robj = comm.scatter(sendobj = sobj, recvobj=None, root= 0) INcomm communicator e.g. MPI:COMM_WORLD IN sobj python object to be scattered from root (significant only at root) OUT robj python object for scattered parts of sobj IN root rank of receiving process (integer) comm.Scatter(sar, rar, root= 0) INcomm communicator e.g. MPI:COMM_WORLD IN sar numpy array to be scattered from root (significant only at root) OUT rar numpy array for receiving scattered parts of sar IN root rank of receiving process (integer)

MPI_SCATTER: Verteilen von root Parallelrechner-Programmierung mit MPI1807. – 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

MPI_ALLGATHER: Sammeln auf alle Tasks Parallelrechner-Programmierung mit MPI1907. – 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)

MPI_ALLGATHER: Sammeln auf root 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 mit der durch recvcount und recvtype festgelegten Datenmenge übereinstimmen Task 0 Task 1 Task 2 sendbuf recvbufbuf sendbuf recvbufbuf Vor MPI_ALLGATHERNach MPI_ALLGATHER

MPI_ALLGATHER mit MPI_IN_PLACE Parallelrechner-Programmierung mit MPI2107. – 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

MPI_ALLGATHERV: Sammeln auf alle Tasks Parallelrechner-Programmierung mit MPI2207. – 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)

MPI_ALLTOALL: Sammeln und Verteilen Parallelrechner-Programmierung mit MPI2307. – 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)

0 MPI_ALLTOALL: Sammeln und Verteilen Parallelrechner-Programmierung mit MPI2407. – 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

Reduktions-Operationen Parallelrechner-Programmierung mit MPI2507. – 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

Vordefinierte Reduktions-Operationen Parallelrechner-Programmierung mit MPI2607. – Name Meaning (fortran,c) (mpi4py) MPI_MAX MPI.MAXmaximum MPI_MIN MPI.MINminimum MPI_SUM MPI.SUMsum MPI_PROD MPI.PRODproduct MPI_LAND MPI.LANDlogical and MPI_BAND MPI.BANDbit-wise and MPI_LOR MPI.LORlogical or MPI_BOR MPI.BORbit-wise or MPI_LXOR MPI.LXORlogical exclusive or (xor) MPI_BXOR MPI.BXORbit-wise exclusive or (xor) MPI_MAXLOC MPI.MAXLOCmax value and location MPI_MINLOC MPI.MINLOCmin value and location

A0 op A0 op A0 A1 op A1 op A1 Reduktions-Operationen Parallelrechner-Programmierung mit MPI2707. – 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

Reduktions-Operationen mit mpi4py Parallelrechner-Programmierung mit MPI2807. – robj = comm.reduce(sendobj = sobj, recvobj=None, op=oper,root= 0) INcomm communicator e.g. MPI.COMM_WORLD IN sobj python object to be reduced OUT robj python object for result of reduction (significant only at root) INoperreduction operation, e.g. MPI.SUM IN root rank of receiving process (integer) comm.Reduce(sar, rar,op=oper root= 0) INcomm communicator e.g. MPI.COMM_WORLD IN sar numpy array to be reduced OUT rar numpy array for result of reduction (significant only at root) INoperreduction operation, e.g. MPI.SUM IN root rank of receiving process (integer)

A0 op A0 op A0 A1 op A1 op A1 Reduktions-Operationen Parallelrechner-Programmierung mit MPI2907. – 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

Reduktions-Operationen Parallelrechner-Programmierung mit MPI3007. – 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)

A0 A1 A2 A3 A4 A5 Max(A2, A2,A2 ) Max(A3, A3,A3) Reduktions-Operationen Parallelrechner-Programmierung mit MPI3107. – 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

A0 op A0 A1 op A1 Reduktions-Operationen Parallelrechner-Programmierung mit MPI3207. – 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