Einführung in das parallele Programmieren mit MPI und Java



Ähnliche Dokumente
Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Einführung in die Programmierung

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Objektorientierte Programmierung

Delegatesund Ereignisse

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Große Übung Praktische Informatik 1

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Programmierkurs Java

Einführung in die C++ Programmierung für Ingenieure

Computeranwendung und Programmierung (CuP)

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Einführung in die Java- Programmierung

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Massenversand Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Zählen von Objekten einer bestimmten Klasse

1 Vom Problem zum Programm

teamsync Kurzanleitung

Lehrer: Einschreibemethoden

Testen mit JUnit. Motivation

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Remote Method Invocation

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Zwischenablage (Bilder, Texte,...)

Programmieren in Java

2. Semester, 2. Prüfung, Lösung

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Kursangebot gesammelt einlesen

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Algorithmen und Datenstrukturen

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Vorkurs C++ Programmierung

Anleitung über den Umgang mit Schildern

Studentische Lösung zum Übungsblatt Nr. 7

Anleitung für die Formularbearbeitung

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Distributed Computing Group

2A Basistechniken: Weitere Aufgaben

Bedienungsanleitung Anlassteilnehmer (Vereinslisten)

Einführung in das parallele Programmieren mit MPI

Synchronisations- Assistent

Microsoft Outlook 2010 Handbuch

Java: Vererbung. Teil 3: super()

NODELOCKED LIZENZ generieren (ab ST4)

Lieferschein Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Angaben zu einem Kontakt...1 So können Sie einen Kontakt erfassen...4 Was Sie mit einem Kontakt tun können...7

SMS/ MMS Multimedia Center

Modellierung und Programmierung 1

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

GITS Steckbriefe Tutorial

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Exkurs: Paralleles Rechnen

Zusammenführen mehrerer Dokumente zu einem PDF In drei Abschnitten erstellen Sie ein Dokument aus mehreren Einzeldokumenten:

Kontakte Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

1. Formulieren Sie den Algorithmus <Bedienung eines Getränkeautomaten> nach den oben genannten Kriterien.

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Grundlagen von Python

Historical Viewer. zu ETC5000 Benutzerhandbuch 312/15

Propädeutikum zur Programmierung

Jederzeit Ordnung halten

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Einstellen der Makrosicherheit in Microsoft Word

Standard XPersonenstand - Version Verbindliche Handlungsanweisungen

Deklarationen in C. Prof. Dr. Margarita Esponda

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

Erstellen von x-y-diagrammen in OpenOffice.calc

Innere Klassen in Java

Schnellanleitung: Verbuchung von Studien- und Prüfungsleistungen

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Speicher in der Cloud

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

DELFI. Benutzeranleitung Dateiversand für unsere Kunden. Grontmij GmbH. Postfach Bremen. Friedrich-Mißler-Straße Bremen

Wir machen neue Politik für Baden-Württemberg

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Leseprobe. Bruno Augustoni. Professionell präsentieren. ISBN (Buch): ISBN (E-Book):

Erstellen einer in OWA (Outlook Web App)

Einführung in die Programmierung (EPR)

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

GSD-Radionik iradionics Android-App

Erfahrungen mit Hartz IV- Empfängern

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Typumwandlungen bei Referenztypen

Verteilte Systeme CS5001

Glaube an die Existenz von Regeln für Vergleiche und Kenntnis der Regeln

Programmieren einer Lüftungsanlage mit DDC-Suite Vorlagen Arbeiten mit dem Fupla

Einführung in Javadoc

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Themen. Web Service - Clients. Kommunikation zw. Web Services

Klausur in Programmieren

Beispiel(unten ist der Spielfeldrand):

Anleitung zur Einrichtung der VR-NetWorld Card basic in der VR-NetWorld Software

Transkript:

Einführung in das parallele Programmieren mit und Java Seite 1

Übersicht Parallele Prozesse und Erste Schritte mit Kollektive Kommunikation Weitere Möglichkeiten Seite 2

Literatur (1) Homepage des 2-Forums http://www.mpi-forum.org/ -Spezifikations-Dokumente (auch zum Nachschlagen gut geeignet) Als html- und Postscript-Datei Seite 3

Literatur (2) mpijava Home Page http://www.hpjava.org/mpijava.html Spezifikation von mpijava Seite 4

Literatur (3) Marc Snir, Steve Otto, Steven Huss-Lederman, David Walker, Jack Dongarra:. The Complete Reference Vol. 1: The core. Second edition. 350 Seiten - MIT Press Von den Autoren des -Standards. Lehnt sich stark an das Spezifikations-Dokument an (teilweise wortgleich, teilweise ausführlicher). Die 1. Auflage gibt es auch als html- oder Postscript-Datei. Seite 5

Literatur (4) William Gropp, Ewing Lusk, Anthony Skjellum: Using The MIT Press, Cambridge, London 1999 William Gropp, Ewing Lusk, Rajeev Thakur Using -2 The MIT Press Cambridge, London 2000 Seite 6

Literatur (5) Peter S. Pacheco A User s Guide to 51 Seiten Seite 7

Literatur (6) Eine erweiterte Version dieses Dokuments gibt es auch als Buch. Peter Pacheco: Parallel Programming With 440 Seiten - Morgan Kaufmann Publishers Seite 8

Literatur (7) Parallele Programmierung mit - ein Praktikum Thomas Worsch/Peter Sanders 152 Seiten, 1997 Preis: 17,90 EUR ISBN 3-931216-76-4 Seite 9

Parallele Prozesse und Seite 10

Gemeinsamer Speicher P 1 gemeinsamer P 2 Speicher a=4 c=3+a a Seite 11

Explizite Kommunikation P 1 lokaler P 2 Speicher a empfangen c=3+a a=4 a senden a a Seite 12

Message Passing Datenaustausch bei gemeinsamem Speicher (shared memory): Standard: OpenMP Datenaustausch bei lokalem Speicher (distributed memory) und expliziter Kommunikation (message passing) Standard: Seite 13

(Message Passing Interface) ist eine Bibliothek (C, Fortran, C++), mit der die explizite Kommunikation abgewickelt werden kann. (Genauer: definiert einen Standard für solche Bibliotheken.) Es gibt auch eine inofizielle Java-Version. Vorteile bei Einsatz von : hohe Übertragungsleistung durch optimierte Implementierungen alternativ: frei verfügbare Implementierungen Portabilität auch bei gemeinsamem Speicher möglich viele -basierte Bibliotheken verfügbar Seite 14

-Versionen -Versionen: Befehle: Version 1.0 (1994): Unterstützung von Fortran77 und C. Version 1.1 (1995): Berichtigungen und Klarstellungen, kleine Änderungen. Version 1.2 (1997): Weitere Berichtigungen und Klarstellungen. Version 2.0 (1997): Wesentliche Erweiterungen: Einseitige Kommunikation, -IO, dynamische Generierung von Tasks, Unterstützung von Fortran 90 und C++ Mächtig und komplex 129 0 1 193 323 Seite 15

Lernaufwand ist einfach: viele -Programme nutzen nur 10-20 Befehle. Zum einfachen Arbeiten mit sind 6 Befehle ausreichend. Mit 4 weiteren kann man schon ziemlich viel machen Inhalt dieses Kurses: Start-Paket, wesentliche Konzepte einige Hinweise auf weitere -Funktionalität Seite 16

Erste Schritte mit in Java Seite 17

Hello, world import mpi.*; public class _HelloWorld { public static void main(string[] args) { System.out.println("Hello, world"); } } Programm javac _HelloWorld.java prunjava 4 _HelloWorld Eingabe Hello, world Hello, world Hello, world Hello, world Ausgabe Seite 18

Zweck der -Befehle Programm wird 4 mal gestartet und produziert 4 mal das gleiche Ergebnis Es fehlt noch: Die Prozesse müssen miteinander kommunizieren. Sie müssen sich gegenseitig identifizieren können. Sich müssen sich untereinander synchronisieren. Befehle Seite 19

Theorie: Was ist ein Kommunikator? Ein -Kommunikator ist eine Datenstruktur (Objekt), über die die Kommunikation zwischen den Prozessen abgewickelt wird. umfasst Gruppe von Prozessen Alle diese Prozesse besitzen eine Kopie dieses Kommunikators Markierung (tag) Jede Nachricht gehört zu einem bestimmten Kommunikator In Java und C++: Methoden zum Senden und Empfangen. Seite 20

Klassen für Kommunikatoren Comm Intercomm Intracomm Graphcomm Cartcomm Keine Unterscheidung innerhalb des Kurses Vordefinierte Kommunikatoren:.COMM_WORLD.COMM_SELF Umfasst alle gestarteten Prozesse Umfasst nur den Prozess selbst Seite 21

10 grundlegende Befehle.Init,.Finalize Initialisieren/ Deinitialisieren <Comm>.Size, <Comm>.Rank <Comm>.Send, <Comm>.Recv Identifikation Senden und Empfangen (point to point communication) <Intracomm>.Scatter, <Intracomm>.Gather, <Intracomm>.Bcast, <Intracomm>.Reduce Kollektive Kommunikation Seite 22

import mpi.*; public static void main(string[] args) throws Exception { int size; int my_rank; Erstes Beispielprogramm.Init(args); size =.COMM_WORLD.Size(); rank =.COMM_WORLD.Rank(); System.out.println("I am process "+rank+" out of "+ size); }.Finalize(); Seite 23

Ausgabe SUNOS:sunc00:mpi_kurs[19]$ prunjava 4 1 I am process 2 out of 4I am process 0 out of 4 I am process 1 out of 4 I am process 3 out of 4 SUNOS:sunc00:mpi_kurs[20]$ prunjava 4 1 I am process 3 out of 4I am process 2 out of 4 I am process 1 out of 4 I am process 0 out of 4 SUNOS:sunc00:mpi_kurs[22]$ mprun -np 4 hw.out I am process I am process 01 out of 4<CR> I am process 2 out of 4I am process out of 4<CR> <CR> 3 out of 4<CR> Seite 24

Beispiel 2: Senden und Empfangen Master-Prozess: rank 0 Worker-Prozesse: rank 1.. (size-1) Jeder Worker-Prozess sendet count Messages mit den Zahlen 1.. count an den Master-Prozess. Der Master-Prozess empfängt alle Messages und gibt sie auf dem Bildschirm aus Seite 25

Ausgabe SUNOS:sunc00:mpi_kurs[51]$ prunjava 3 2 1: Received 1. Message from Process 1 2: Received 1. Message from Process 3 3: Received 2. Message from Process 1 4: Received 1. Message from Process 2 5: Received 2. Message from Process 3 6: Received 3. Message from Process 1 7: Received 2. Message from Process 2 8: Received 3. Message from Process 3 9: Received 3. Message from Process 2 Seite 26

Source-Code (1) import mpi.*; public static void main(string[] args) throws Exception { int size, my_rank; int count = 3;.Init(args); size =.COMM_WORLD.Size(); my_rank =.COMM_WORLD.Rank(); Seite 27

} if (my_rank!=0) { //Worker int[] sbuf = new int[1]; for (sbuf[0]=1; sbuf[0]<=count; sbuf[0]++) { } Seite 28.COMM_WORLD.Send(sbuf, 0, 1,.INT, 0, 0); } else { } int[] rbuf = new int[1]; for (int i=1; i<=count*(size-1); i++) { } Status st =.COMM_WORLD.Recv(rbuf, 0, 1,.INT,.ANY_SOURCE,.ANY_TAG); System.out.println(my_rank+": Received "+rbuf[0]+.finalize(); Source-Code (2) ". message from process "+st.source);

Grundtypen C -Typ (C-Typ) _CHAR (signed char) _SHORT (signed short int) _INT (signed int) _LONG (signed long int) _UNSIGNED_CHAR (unsigned char) _UNSIGNED_SHORT (unsigned short int) _UNSIGNED (unsigned int) _UNSIGNED_LONG (unsigned long int) _FLOAT (float) _DOUBLE (double) _LONG_DOUBLE (long double) _BYTE _PACKED Java -Typ (Java-Typ).BYTE (byte).char (char).short (short).boolean (boolean).int (int).long (long).float (float).double (double).object (Object).PACKED Seite 29

Deadlock Send Receive P 2 Send Send Receive Receive P 1 P 3 Send Send P 0 P 4 Receive Receive Send P 7 P 5 Send Receive Receive P 6 Send Receive Seite 30

Serialisierung Send Receive P 2 Send Send Receive Receive P 1 P 3 Send Receive P 0 P 4 Receive Send Send P 7 P 5 Send Receive Receive P 6 Send Receive Seite 31

Kollektive Kommunikation Seite 32

_Barrier <Intracomm>.Barrier(): Prozesse dürfen erst dann weitermachen, wenn alle Prozesse des Kommunikators diese Stelle erreicht haben. Wird normalerweise nicht gebraucht. Sämtliche Synchronisation sollte automatisch mit den Befehlen zur Datenkommunikation erledigt werden. Seite 33

_Bcast <Intracomm>.Bcast: Verteilt einen einzigen Datensatz auf alle Prozesse (einschließlich des eigenen). a Broadcast a a a Seite 34

_Scatter und _Gather <Intracomm>.Scatter: Verteilt ein Feld von Datensätzen auf alle Prozesse, etwa wie beim Austeilen von Karten. a c b Scatter Gather a b c <Intracomm>.Gather: Die Umkehrung von Scatter. Sammelt die Daten (in der richtigen Reihenfolge) wieder ein. Seite 35

_Reduce <Intracomm>.Reduce: Die Daten werden wie bei _Gather gesammelt, jedoch nicht in einem Feld abgelegt, sondern zu einem einzigen Datensatz verknüpft. Seite 36

Reduzierungs-Operationen Bei <Intracomm>.Reduce sind verschiedene Reduzierungs- Operationen möglich (+selbstdefinierte):.max,.min,.sum,.prod,.land (logical and),.band (bitwise and),.lor,.bor,.lxor,.bxor,.maxloc,.minloc (liefert Maximum/Minimum und den Rank des entsprechenden Prozesses). Seite 37

_Reduce mit _SUM <Intracomm>.Reduce mit op=.sum würde einem <Intracomm>.Gather mit anschließender Aufsummierung der Feldelemente entsprechen. a Reduce a a+b+c b b c c Seite 38

Andere kollektive Operationen Es gibt noch andere kollektive Operationen, in denen die Daten von vielen Prozessen an viele Prozesse verteilt werden. (<Intracomm>.Allgather, <Intracomm>.Alltoall, <Intracomm>.Reduce_scatter) Seite 39

Weitere Möglichkeiten Übertragung komplexer Datentypen (Strings, Objekte) Übertragung nichtkontinuierlicher Elemente eines Felds Seite 40

Weitere Möglichkeiten Ordnen der Prozesse in einer Topologie (0,0) (0,1) (0,2) (1,0) (1,1) (1,2) (2,0) (2,1) (2,2) Seite 41

Möglichkeiten aus 2 Dynamisches Starten von neuen Prozessen Einseitige Kommunikation (Programmierung fast wie bei gemeinsamem Speicher). Parallele I/O mit C++ Seite 42