GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan [email protected].

21
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan [email protected]

Transcript of GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan [email protected].

Page 1: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

GWDG – KursParallelrechner-Programmierung mit MPI

MPIEine Einführung

Oswald [email protected]

Page 2: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 223. – 25. 09. 2013

MPI: Message passing interface

MPI : message passing library interface specification

message passing: Message Passing Programmiermodell(Datenaustausch zwischen zwei Prozessen)

Erweiterungen(Kollektive Operation, Zugriff auf entfernte Speicher, Dynamische Prozesskontrolle, Parallele Ein-Ausgabe)

library interface: MPI benutzt Funktionen und Unterprogramme, die von Fortran oder C Programmen aufgerufen

werden, keine neue Programmiersprache

specification: Beschreibung, keine Implementierung

Page 3: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 3

Programmiermodell: message passing

23. – 25. 09. 2013

Verteilung von Daten und Instruktionen auf mehrere Prozessoren

Objekte:Lokale Daten, Instruktionen, Lokale PZs, task-id

Operationen:opcode op1, op2,...,re1,re2send(ad,n,tid), recv(ad,n,tid)

Reihenfolge:Synchronisation durch blockierendes recv

I

D

PZ

Speicher

VE

Puffer

Verbindungsnetz

I

D

PZ

Speicher

VE

Puffer

I

D

PZ

Speicher

VE

Puffer

Page 4: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 4

Programmiermodell: message passing

23. – 25. 09. 2013

An MPI program consists of autonomous processes, executing their own code, in an MIMD style. The codes executed by each process need not be identical. The processes communicate via calls to MPI communication primitives. Typically, each process executes in its own address space, although shared-memory implementations of MPI are possible.

Mehrere Tasks bearbeiten gemeinsam ein paralleles Programm

Jeder Task hat lokale task-id zur Identifikation

lokalen Adress-Raum für lokale Daten für das lokale Programmfür lokale Puffer

Page 5: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 523. – 25. 09. 2013

MPI: Message passing interface

MPI beinhaltet die Spezifikation der Sprachelemente, die die Zusammenarbeit der Tasks aus der Sicht der lokalen Task beschreiben sollen

Die wichtigsten Sprachelemente:• sequentielle Programmiersprachen Fortran und C• Information über Tasks :

Task-id (rank) der eigenen und der fremden Tasks • Punkt zu Punkt-Kommunikation:

Datenaustausch mit einer fremden Task• Globale Kommunikation:

Datenaustausch mit mehreren oder allen fremden Tasks• Synchronisation

Page 6: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 6

Entwicklung von MPI

23. – 25. 09. 2013

1980-1990 Vorläufer

1994

1996-2009

2012

Page 7: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 723. – 25. 09. 2013

MPI-Forum

Das MPI-Forum, eine Gruppe von Hardware-Herstellern, Software-Entwicklern und Anwendern hat den Standardisierungsprozess ins Leben gerufen und steuert die Weiterentwicklung des Standards. http://www.mpi-forum.org/

Page 8: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 823. – 25. 09. 2013

MPI-Dokumentation

Offizielle Dokumentation des Standards (MPI-2.2) durch das MPI-Forum:http://mpi-forum.org/docs/mpi-2.2/mpi22-report.pdf

Inoffizielle HTML-Version dieses Dokuments:http://mpi-forum.org/docs/mpi22-report/mpi22-report.htm Open MPI v1.6.4 documentation (man pages)http://www.open-mpi.org/doc/current/

Page 9: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 923. – 25. 09. 2013

MPI-Implementierung

Das MPI-Forum legt den MPI-Standard für die Syntax der Schnittstellen und ihre Funktionen fest. Die Implementierung überlässt es anderen.

Aufgaben der Implementierung:• Übersetzung der standardisierten Sprachelemente in

Maschinenbefehle, die die zugrundliegende Prozessor- und Verbindungsnetz-Hardware bedienen.

• Bereitstellung von Prozeduren zur Erzeugung, Kontrolle und Beendigung von parallelen Tasks auf den Prozessoren

Bei der GWDG verfügbare ImplementierungenOpenMPI: OpenSource Implementierung des MPI-2 StandardsIntel-mpi: Proprietäre Implementierung des MPI-2 Standards

Page 10: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 1023. – 25. 09. 2013

MPI : Vorteile und Nachteile

• Trennung von Spezifikation und Implementierung:• Standardisiertes Interface zu Bibliotheksroutinen erlaubt Portabilität• Hardwarespezifische Implementierungen erlauben die bestmögliche

Ausnutzung von Hardwareeigenschaften

• Nutzungsgerechte Funktionen vereinfachen Programmentwicklung und ermöglichen spezielle Implementierungen mit hoher Effizienz

• Parallelisierung mit Message Passing erfordert Aufteilung und Austausch der Daten und Aufteilung der Rechenlast

• Unterstützung von vielen Nutzungsformen und Implementierungsarten führt zu einer Vielzahl von z.T. komplexen Bibliotheksroutinen (mehr als 250 MPI-Funktionen)

Page 11: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 1123. – 25. 09. 2013

MPI : Funktionsgruppen

Point-to-point communication

Datatypes

Collective operations

Process groups

Communication contexts

Process topologies

Environmental Management and inquiry

The info object

Process creation and management

One-sided communication

External interfaces

Parallel file I/O

Language Bindings for Fortran, C and C++

Profiling interface

Page 12: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 1223. – 25. 09. 2013

MPI-Funktionen; Spezifikation

• Beispiel Blockierendes Daten-Empfangen MPI_RECV:

MPI_RECV (buf, count, datatype, source, tag, comm, status)

OUT buf initial address of receive buffer (choice)IN count number of elements in receive buffer (non-negative

integer)IN datatype datatype of each receive buffer element (handle)IN source rank of source or MPI_ANY_SOURCE (integer)IN tag message tag or MPI_ANY_TAG (integer)IN comm communicator (handle)OUT status status object (Status)

IN, OUT, INOUT: Argument wird als Eingabe, Ausgabe oder beides verwendet

Page 13: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 1323. – 25. 09. 2013

MPI: Opaque Objekte und Handles

MPI verwaltet Speicher für Puffer und für die interneDarstellung von MPI-Objekten, wie Kommunikatoren,Datentypen, usw. Dieser Speicher ist für den Benutzer nicht direkt, sondern nur über sog. Handles im Zugriff

Ein opaques Objekt und sein Handle ist nur für denzugehörigen Prozess signifikant und kann nicht auf andere Prozesse übertragen werden.

Opaque Objekte ermöglichen die Nutzung vonDatenobjekten über verschiedene Sprachen hinweg und erlauben eine flexible Verwaltung von Ressourcen. In Fortran sind alle Handles vom Typ Integer, in C gibt esunterschiedliche Typen für jede Kategorie.

Page 14: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 1423. – 25. 09. 2013

MPI-Funktionen: Syntax

FORTRAN :

MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR)

<type> BUF(*)INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM,

STATUS(MPI_STATUS_SIZE),IERROR

C :

int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source,int tag, MPI_Comm comm, MPI_Status *status)

Fehlerstatus als Argument IERROR bei FORTRAN, als Rückgabewert bei C

Page 15: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 1523. – 25. 09. 2013

MPI: vordefinierte Namen

MPI_COMM_WORLD Kommunikationsbereich mit allen beteiligten ProzessenMPI_ANY_TAG, MPI_ANY_SOURCE die Argumente tag bzw. source sind beliebig MPI_STATUS_SIZE Anzahl von Elementen für das Feld statusMPI_INTEGER , MPI_REAL, MPI_DOUBLE_PRECISION, … MPI-Namen für Fortran-DatentypenMPI_INT, MPI_FLOAT, MPI_DOUBLE, … MPI-Namen für C-Datentypen

Vordefinierte Namen brauchen nicht deklariert zu werden

Page 16: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 1623. – 25. 09. 2013

MPI Programmstruktur

Fortran

program maininclude ´mpif.h´integer ierror

... call MPI_INIT(ierror) ... Aufrufe von MPI-Routinen ... call MPI_FINALIZE(ierror) ...end

C

#include "mpi.h"int main(int argc, char **argv){ ...MPI_Init(&argc, &argv); ... Aufrufe von MPI-Routinen ... MPI_Finalize(); ...}

Page 17: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 1723. – 25. 09. 2013

Start eines MPI-Programms

Startmechanismus und Startbefehlssnytax wird von der Implementierung vorgegeben

Einfachste Form:

mpirun –n 4 ./a.out

Startet auf n Prozessoren je einen Prozess (Task), der jeweils die gleiche Datei a.out ausführt.

SPMD-Modell: Single Program, Multiple DataJedem Task wird eine eindeutige Identifizierung zugeordnet, mit deren Hilfe die von a.out durchgeführten Befehle differenziert werden können.

Page 18: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 1823. – 25. 09. 2013

MPI-Bezeichnungen

Communicator : Die von mpirun parallel gestarteten Tasks, die miteinander kommunizieren

MPI_COMM_WORLD: vordefinierter Name des beim Start

erzeugten communicators

Communicator size Anzahl der im communicator versammelten Tasks

Process rank eindeutige Identifizierung der einzelnen Task durch eine Zahl

zwischen 0 und size-1

Page 19: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 1923. – 25. 09. 2013

Obligatotische MPI-Komponenten

mpif.h, mpi.h Include-Dateien für Fortran und C mit Deklarationen der vordefinierten Namen und Konstanten

MPI_INIT()

MPI_FINALIZE()

MPI_COMM_SIZE(comm, size)IN comm communicator (handle)OUT size number of processes in the group of comm (integer)

MPI_COMM_RANK(comm, rank)IN comm communicator (handle)OUT rank rank of the calling process in group of comm (integer)

Page 20: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 2023. – 25. 09. 2013

Erstes MPI Programm (Fortran)

program helloinclude ´mpif.h´integer ier, np, tid

call MPI_INIT(ier)call MPI_COMM_SIZE(MPI_COMM_WORLD, np, ier)call MPI_COMM_RANK(MPI_COMM_WORLD, tid, ier)call MPI_FINALIZE(ier)write(6,*)‘hello on task‘, tid

end

Page 21: GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan ohaan@gwdg.de.

Parallelrechner-Programmierung mit MPI 2123. – 25. 09. 2013

Weitere nützliche MPI-Routinen

MPI_GET_PROCESSOR_NAME( name, resultlen )OUT name A unique specier for the actual node (character).OUT resultlen Length (in printable characters) of the result returned

in name (integer)MPI_WTIME() returns a floating-point number of seconds, representing elapsed wallclocktime since some time in the past

MPI_WTICK()MPI_WTICK returns the resolution of MPI_WTIME in seconds, i.e. as a double precision value the number of seconds between successive clock ticks.