GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

ALP II: Objektorientierte Programmierung Sommersemester 2006
Imperative Programmierung
Message Passing Interface (MPI)
der Universität Oldenburg
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
der Universität Oldenburg
Enno Rehling und Roger Butenuth, Uni-GH Paderborn: Arminius: Software für Linux-basierte SCI-Cluster Arminius: Software für Linux-basierte SCI-Cluster.
On a Buzzword: Hierachical Structure David Parnas.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Sprache
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
OpenMP Präsentation im Rahmen des Seminars
Oracle WebServer - Einführung. © Prof. T. Kudraß, HTWK Leipzig Oracle Web Application Server HTML WebServer ® File system Static HTML PL/SQL Packages.
Einführung XML XML Einführung Andreas Leicht.
Brandenburgische Technische Universität Cottbus Program Profiling Andrzej Filipiak Übung Testen von Software SoSe 2006.
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Optimierungstechniken für SMP- Architekturen.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Einführung in die Programmierung Datensammlung
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
SOMA Service-Oriented Mobile learning Architecture.
16 Kostenrechnung
Templates. © beas2009 / Page 2 This documentation and training is provided to you by beas group AG. The documents are neither approved nor in any way.
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Einführung Oswald Haan
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Punkt-zu-Punkt-Kommunikation Oswald Haan
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Sesame Florian Mayrhuber
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 – Oswald Haan
Einführung in die Programmiersprache C 4
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
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Kollektive Operationen Oswald Haan
Programmierung 1. Einführung Seite 1
Objectives Verstehen was unterDelegate verstanden wird
Grundlagen Wissenschaftlichen Arbeitens Hilal Tekoglu
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Mag. Andreas Starzer weloveIT – EDV Dienstleistungen
MODULA-2.
Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Kollektive Operationen Oswald Haan
SFZ FN Sj. 13/14 Python 1 Grundlagen Inf K1/2 Sj 13/14
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
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Kollektive Operationen Oswald Haan
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Einführung Oswald Haan
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
->Prinzip ->Systeme ->Peer – to – Peer
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Punkt-zu-Punkt-Kommunikation Oswald Haan
2 Datenabstraktion Geheimnisprinzip:
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Punkt-zu-Punkt-Kommunikation Oswald Haan
PVM – Parallel Virtual Machine Michael Springmann.
Multiprocessing mit OpenMPI Marius Albath. Vorlesung Betriebssysteme, Was ist OpenMPI Was ist OpenMPI OpenMPI Standard Setup OpenMPI Standard.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Technische Universität München, Informatik XI Angewandte Informatik / Kooperative Systeme Verteilte Anwendungen: Einflußreiche Systeme Dr. Wolfgang Wörndl.
- moodle – a internet based learning platform
Shared Memory Programmierung: Grundlagen
 Präsentation transkript:

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

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 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Programmiermodell: message passing Verbindungsnetz Verteilung von Daten und Instruktionen auf mehrere Prozessoren Objekte: Lokale Daten, Instruktionen, Lokale PZs, task-id Operationen: opcode op1, op2,...,re1,re2 send(ad,n,tid), recv(ad,n,tid) Reihenfolge: Synchronisation durch blockierendes recv Puffer Puffer Puffer Speicher Speicher Speicher I D I D I D PZ PZ PZ VE VE VE 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Programmiermodell: message passing 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 Programm für lokale Puffer 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

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 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Parallelrechner-Programmierung mit MPI Entwicklung von MPI 1980-1990 Vorläufer 1994 1996-2009 2012 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Parallelrechner-Programmierung mit MPI 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/ 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Parallelrechner-Programmierung mit MPI 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/ MPI- The Complete Reference http://www.cslab.ntua.gr/courses/common/mpi-book.pdf Parallel Programming with MPI http://www.cs.usfca.edu/~peter/ppmpi/ Using MPI http://biblioteca.cio.mx/ebooks/e0206.pdf 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Parallelrechner-Programmierung mit MPI 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 Implementierungen OpenMPI: OpenSource Implementierung des MPI-2 Standards Intel-mpi: Proprietäre Implementierung des MPI-2 Standards 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

MPI beyond Fortran and C Other programming languages, for which bindings to the MPI functionality exist: C++ Python R Matlab Java Haskell OpenGL Ada Caml Lisp C# Available on GWDG-clusters mpi4py: open source python bindings for MPI 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Documentation for mpi4py MPI for Python http://mpi4py.scipy.org/docs/usrman/index.html API Reference http://mpi4py.scipy.org/docs/apiref/index.html A Python Introduction to Parallel Programming with MPI http://materials.jeremybejarano.com/MPIwithPython/index.html No books with complete description of mpi4py available 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

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: http://www.open-mpi.org/doc/current/) 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

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 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

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 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

MPI: Opaque Objekte und Handles MPI verwaltet Speicher für Puffer und für die interne Darstellung 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 den zugehörigen Prozess signifikant und kann nicht auf andere Prozesse übertragen werden. Opaque Objekte ermöglichen die Nutzung von Datenobjekten über verschiedene Sprachen hinweg und erlauben eine flexible Verwaltung von Ressourcen. In Fortran sind alle Handles vom Typ Integer, in C gibt es unterschiedliche Typen für jede Kategorie. 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

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 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

MPI-Funktionen: Syntax mpi4py obj = comm.recv(source = s, tag = t, status = stat) where comm: Communicator, e.g. MPI.COMM_WORLD obj: python object, s,t: integer, stat: MPI.status() comm.Recv(ar, source = s, tag = t, status = stat) where comm: Communicator, e.g. MPI.COMM_WORLD ar: numpy array, s,t: integer, Error handling implicit via python module Exception 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

MPI: vordefinierte Namen MPI_COMM_WORLD (for mpi4py: MPI.COMM_WORLD) Kommunikationsbereich mit allen beteiligten Prozessen MPI_ANY_TAG, MPI_ANY_SOURCE (for mpi4py: MPI.ANY_TAG, MPI.ANY_SOURCE) die Argumente tag bzw. source sind beliebig MPI_STATUS_SIZE Anzahl von Elementen für das Feld status MPI_INTEGER , MPI_REAL, MPI_DOUBLE_PRECISION, … MPI-Namen für Fortran-Datentypen MPI_INT, MPI_FLOAT, MPI_DOUBLE, … MPI-Namen für C-Datentypen Vordefinierte Namen brauchen nicht deklariert zu werden 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Parallelrechner-Programmierung mit MPI MPI Programmstruktur Fortran program main include ´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(); } 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Parallelrechner-Programmierung mit MPI MPI Programmstruktur python from mpi4py import MPI ... Aufrufe von MPI-Routinen 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Start eines MPI-Programms Startmechanismus und Startbefehlssyntax wird von der Implementierung vorgegeben Einfachste Form: mpirun –n 4 ./a.out mpirun –n 4 python script.py Startet auf 4 Prozessoren je einen Prozess (Task), der jeweils die gleiche Datei a.out resp. script.py ausführt. SPMD-Modell: Single Program, Multiple Data Jedem Task wird eine eindeutige Identifizierung zugeordnet, mit deren Hilfe die von a.out durchgeführten Befehle differenziert werden können. 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Parallelrechner-Programmierung mit MPI 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 ganze Zahl zwischen 0 und size-1 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

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) 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Erstes MPI Programm (Fortran) program hello include ´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‘, np, tid end 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Parallelrechner-Programmierung mit MPI Erstes MPI Programm (C) #include "mpi.h" #include<stdio.h> int main(int argc,char **argv) { int np, tid; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&np); MPI_Comm_rank(MPI_COMM_WORLD,&tid); printf("hello %i %i \n",np,tid); MPI_Finalize(); return 0; } 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Erstes MPI Programm (Python) #hello.py from mpi4py import MPI comm = MPI.COMM_WORLD tid = comm.Get_rank() np = comm.Get_size() print "hello", np, tid 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI

Weitere nützliche MPI-Routinen MPI_GET_PROCESSOR_NAME( name, resultlen ) OUT name A unique specifier for the actual node (character). OUT resultlen Length (in printable characters) of the result returned in name (integer) mpi4py: name = comm.Get_processor_name() MPI_WTIME() returns a floating-point number of seconds, representing elapsed wallclock time since some time in the past mpi4py: name = comm.Wtime() 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. mpi4py: name = comm.Wtick() 07. – 08. 10. 2014 Parallelrechner-Programmierung mit MPI