Parallel Processing in a Nutshell OpenMP & MPI kurz vorgestellt



Ähnliche Dokumente
Parallele Programmierung mit OpenMP

OpenMP am Beispiel der Matrizenmultiplikation

Parallele Programmierung mit OpenMP

Einführung in das parallele Programmieren mit MPI und Java

MPI-Programmierung unter Windows mit MPICH2. Installieren von MPICH2, Übersetzen, Ausführen und Debuggen von MPI-Programmen. Christian Terboven

Grundlagen zu MPI. Martin Lanser Mathematisches Institut Universität zu Köln. October 24, 2017

Einige Grundlagen zu OpenMP

Message Passing Interface: MPI

OpenMP. Viktor Styrbul

OpenMP - Threading- Spracherweiterung für C/C++ Matthias Klein, Michael Pötz Systemprogrammierung 15. Juni 2009

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Zählen von Objekten einer bestimmten Klasse

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Master-Thread führt Programm aus, bis durch die Direktive

Domänenmodell: Fadenkommunikation und -synchronisation

Native Zeichenketten (C-Strings)

MPI: Message passing interface

Parallele Programmierung mit OpenMP

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

Projektseminar Parallele Programmierung

Projektseminar Parallele Programmierung

Praktikum: Paralleles Programmieren für Geowissenschaftler

Installation und Inbetriebnahme von Microsoft Visual C Express

Beispiel: Schleifenparallelisierung

Verteilte Systeme CS5001

Tipps und Tricks zu Netop Vision und Vision Pro

PROLAG WORLD 2.0 PRODUKTBESCHREIBUNG SERVERSYSTEM, CLUSTERSYSTEME FÜR PROLAG WORLD

Installationsanleitung. Novaline Personal Abrechnung. Personal.One

Anlegen eines SendAs/RecieveAs Benutzer unter Exchange 2003, 2007 und 2010

Einrichten eines Microsoft Exchange-Account auf einem Android-System

Educase. Release Notes 1.7: Neue Funktionen und Verbesserungen. Base-Net Informatik AG Wassergrabe 14 CH-6210 Sursee

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Programmierung mit NQC: Kommunikation zwischen zwei RCX

Propädeutikum. Dipl.-Inf. Frank Güttler

ITT WEB-Service DEMO. Kurzbedienungsanleitung

Bitte verwenden Sie nur dokumentenechtes Schreibmaterial!

Arbeitsblätter auf die Schülercomputer verteilen, öffnen und wieder einsammeln

Monitore. Klicken bearbeiten

Business Process Model and Notation

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome

Quick Start Faxolution for Windows

4. Parallelprogrammierung

Synchronisation in Java. Invisible Web

Dynamic Ressource Management

Datenübernahme aus Profi-Cash

TechNote: Exchange Journaling aktivieren

Nutzung paralleler Prozesse bei der Umweltsimulation

Objektorientierte Programmierung

Konzepte der parallelen Programmierung

Einführung in Eclipse und Java

SharePoint Workspace 2010 Installieren & Konfigurieren

Parallele Programmierung mit MPI

Übung: Verwendung von Java-Threads

Task A Zündung. Task B Einspritzung. Task C Erfassung Pedalwert. J. Schäuffele, Th. Zurawka: Automotive Software Engineering, Vieweg, 2003

Durchführung der Datenübernahme nach Reisekosten 2011

Paralleles Programmieren mit MPI und OpenMP

Anleitung zur Nutzung des SharePort Utility

Übersicht Programmablaufsteuerung

Dieses Dokument beschreibt, wie mit FreeFileSync eine einfache Daten-Synchronisation auf gemanagten Geräten eingerichtet wird.

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Computerarithmetik ( )

Kundenleitfaden zur Sicheren per WebMail

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Benutzerhinweise: IGW/920-SK/92 COM Port Redirector

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Installation von Office 365 auf einem privaten PC

Version 0.3. Installation von MinGW und Eclipse CDT

Umstieg auf Microsoft Exchange in der Fakultät 02

Einführung in die Programmierung

Microsoft Update Windows Update

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

Übung 8: Semaphore in Java (eigene Implementierung)

Updatehinweise für die Version forma 5.5.5

Übung - Konfigurieren einer Windows-XP-Firewall

Umgang mit der Software ebuddy Ändern von IP Adresse, Firmware und erstellen von Backups von ewon Geräten.

Automatisches Beantworten von - Nachrichten mit einem Exchange Server-Konto

I N S T A L L A T I O N S A N L E I T U N G

Leistungen der Pflegeversicherung ab

Step by Step Webserver unter Windows Server von Christian Bartl

METTLER TOLEDO ETHERNET-Option

... Client 1. Request. Reply. Client 2. Server. Client n. Günther Bengel Grundkurs Verteilte Systeme 3. Auflage Vieweg Verlag 2004 ISBN

SharePoint Demonstration

Threads und OpenMP. Frank Mietke Cluster- & Gridcomputing Frank Mietke 7/4/04

:: Anleitung Hosting Server 1cloud.ch ::

FastViewer Remote Edition 2.X

Microcontroller Kurs Microcontroller Kurs/Johannes Fuchs 1

Transkript:

Parallel Processing in a Nutshell & kurz vorgestellt 16. Juni 2009 1 / 29

1 Das Problem 2 2 / 29

1 Das Problem 2 3 2 / 29

1 Das Problem 2 3 4 2 / 29

1 Das Problem 2 3 4 2 / 29

Multi-Core Prozessoren halten Einzug (nicht nur) auf dem Desktop Neuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen -> 128 Kerne) Ziele: 3 / 29

Multi-Core Prozessoren halten Einzug (nicht nur) auf dem Desktop Neuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen -> 128 Kerne) Ziele: Zeitkritische Anwendungen von Multi Core profitieren lassen 3 / 29

Multi-Core Prozessoren halten Einzug (nicht nur) auf dem Desktop Neuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen -> 128 Kerne) Ziele: Zeitkritische Anwendungen von Multi Core profitieren lassen Langläufer optimal auf vorhandene Rechenresourcen verteilen Lösungen (naiv) 3 / 29

Multi-Core Prozessoren halten Einzug (nicht nur) auf dem Desktop Neuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen -> 128 Kerne) Ziele: Zeitkritische Anwendungen von Multi Core profitieren lassen Langläufer optimal auf vorhandene Rechenresourcen verteilen Lösungen (naiv) Zeitkritische Sektionen in mehrere Threads aufteilen 3 / 29

Multi-Core Prozessoren halten Einzug (nicht nur) auf dem Desktop Neuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen -> 128 Kerne) Ziele: Zeitkritische Anwendungen von Multi Core profitieren lassen Langläufer optimal auf vorhandene Rechenresourcen verteilen Lösungen (naiv) Zeitkritische Sektionen in mehrere Threads aufteilen Verteilen der Jobs per Hand oder in Skripten 3 / 29

Multi-Core Prozessoren halten Einzug (nicht nur) auf dem Desktop Neuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen -> 128 Kerne) Ziele: Zeitkritische Anwendungen von Multi Core profitieren lassen Langläufer optimal auf vorhandene Rechenresourcen verteilen Lösungen (naiv) Zeitkritische Sektionen in mehrere Threads aufteilen Verteilen der Jobs per Hand oder in Skripten 3 / 29

Hello World Konzept Syntax Hello World++ API (C, C++, Fortran), von diversen Hard- und Softwareherstellern entwickelt und behütet (AMD, Cray, Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft,...) besteht aus: Compiler-Direktiven (#PRAGMA) 4 / 29

Hello World Konzept Syntax Hello World++ API (C, C++, Fortran), von diversen Hard- und Softwareherstellern entwickelt und behütet (AMD, Cray, Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft,...) besteht aus: Compiler-Direktiven (#PRAGMA) Runtime-Library-Routinen 4 / 29

Hello World Konzept Syntax Hello World++ API (C, C++, Fortran), von diversen Hard- und Softwareherstellern entwickelt und behütet (AMD, Cray, Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft,...) besteht aus: Compiler-Direktiven (#PRAGMA) Runtime-Library-Routinen Umgebungsvariablen 4 / 29

Hello World Konzept Syntax Hello World++ API (C, C++, Fortran), von diversen Hard- und Softwareherstellern entwickelt und behütet (AMD, Cray, Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft,...) besteht aus: Compiler-Direktiven (#PRAGMA) Runtime-Library-Routinen Umgebungsvariablen Multi-Threading auf Unix/Windows NT Plattformen mit SHARED Memory 4 / 29

Hello World Konzept Syntax Hello World++ API (C, C++, Fortran), von diversen Hard- und Softwareherstellern entwickelt und behütet (AMD, Cray, Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft,...) besteht aus: Compiler-Direktiven (#PRAGMA) Runtime-Library-Routinen Umgebungsvariablen Multi-Threading auf Unix/Windows NT Plattformen mit SHARED Memory per Kommandozeilenoption bspw. des GCC einschaltbar (-fopenmp) Vorteile: 4 / 29

Hello World Konzept Syntax Hello World++ API (C, C++, Fortran), von diversen Hard- und Softwareherstellern entwickelt und behütet (AMD, Cray, Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft,...) besteht aus: Compiler-Direktiven (#PRAGMA) Runtime-Library-Routinen Umgebungsvariablen Multi-Threading auf Unix/Windows NT Plattformen mit SHARED Memory per Kommandozeilenoption bspw. des GCC einschaltbar (-fopenmp) Vorteile: Programm compiliert/läuft auch seriell 4 / 29

Hello World Konzept Syntax Hello World++ API (C, C++, Fortran), von diversen Hard- und Softwareherstellern entwickelt und behütet (AMD, Cray, Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft,...) besteht aus: Compiler-Direktiven (#PRAGMA) Runtime-Library-Routinen Umgebungsvariablen Multi-Threading auf Unix/Windows NT Plattformen mit SHARED Memory per Kommandozeilenoption bspw. des GCC einschaltbar (-fopenmp) Vorteile: Programm compiliert/läuft auch seriell Programmteile lassen sich leicht parallelisieren 4 / 29

Hello World Konzept Syntax Hello World++ API (C, C++, Fortran), von diversen Hard- und Softwareherstellern entwickelt und behütet (AMD, Cray, Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft,...) besteht aus: Compiler-Direktiven (#PRAGMA) Runtime-Library-Routinen Umgebungsvariablen Multi-Threading auf Unix/Windows NT Plattformen mit SHARED Memory per Kommandozeilenoption bspw. des GCC einschaltbar (-fopenmp) Vorteile: Programm compiliert/läuft auch seriell Programmteile lassen sich leicht parallelisieren Threadanzahl muss nicht (aber kann) vorher festgelegt werden 4 / 29

Hello World Konzept Syntax Hello World++ API (C, C++, Fortran), von diversen Hard- und Softwareherstellern entwickelt und behütet (AMD, Cray, Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft,...) besteht aus: Compiler-Direktiven (#PRAGMA) Runtime-Library-Routinen Umgebungsvariablen Multi-Threading auf Unix/Windows NT Plattformen mit SHARED Memory per Kommandozeilenoption bspw. des GCC einschaltbar (-fopenmp) Vorteile: Programm compiliert/läuft auch seriell Programmteile lassen sich leicht parallelisieren Threadanzahl muss nicht (aber kann) vorher festgelegt werden 4 / 29

Hello World Konzept Syntax Hello World++ #include < s t d i o. h> #include < s t d l i b. h> i n t main ( i n t argc, char argv [ ] ) { #pragma omp p a r a l l e l { p r i n t f ( " Hallo Welt! \ n " ) ; } return (EXIT_SUCCESS ) ; } 1 2 3 4 5 6 7 8 9 10 5 / 29

Hello World Konzept Syntax Hello World++ mschoepf@caesar$ gcc -o HelloWorld -fopenmp HelloWorld.c mschoepf@caesar$./helloworld Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! mschoepf@caesar$ ssh arminius./helloworld Hallo Welt! 6 / 29

Hello World Konzept Syntax Hello World++ Durch explizite Compileranweisungen werden Programmsektionen in Threads ( team ) aufgeteilt. Der Speicherbereich wird geshared 7 / 29

Hello World Konzept Syntax Hello World++ Durch explizite Compileranweisungen werden Programmsektionen in Threads ( team ) aufgeteilt. Der Speicherbereich wird geshared Verschachtelte Parallelisierung von der API möglich 7 / 29

Hello World Konzept Syntax Hello World++ Durch explizite Compileranweisungen werden Programmsektionen in Threads ( team ) aufgeteilt. Der Speicherbereich wird geshared Verschachtelte Parallelisierung von der API möglich Dynamische Erhöhung/Reduzierung der Anzahl der Threads 7 / 29

Hello World Konzept Syntax Hello World++ Durch explizite Compileranweisungen werden Programmsektionen in Threads ( team ) aufgeteilt. Der Speicherbereich wird geshared Verschachtelte Parallelisierung von der API möglich Dynamische Erhöhung/Reduzierung der Anzahl der Threads KEINE explizite Unterstützung von I/O 7 / 29

Hello World Konzept Syntax Hello World++ Durch explizite Compileranweisungen werden Programmsektionen in Threads ( team ) aufgeteilt. Der Speicherbereich wird geshared Verschachtelte Parallelisierung von der API möglich Dynamische Erhöhung/Reduzierung der Anzahl der Threads KEINE explizite Unterstützung von I/O Threads können ihre Daten cachen. Bei geteilten Variablen muss ggf. explizit geflushed werden 7 / 29

Hello World Konzept Syntax Hello World++ Durch explizite Compileranweisungen werden Programmsektionen in Threads ( team ) aufgeteilt. Der Speicherbereich wird geshared Verschachtelte Parallelisierung von der API möglich Dynamische Erhöhung/Reduzierung der Anzahl der Threads KEINE explizite Unterstützung von I/O Threads können ihre Daten cachen. Bei geteilten Variablen muss ggf. explizit geflushed werden 7 / 29

Hello World Konzept Syntax Hello World++ #pragma omp <Direktive> [Klausel,... ] parallel - erstellt Team von Threads for - verteilt Schleife aufs Team sections - leitet Block mit Unteraufgaben ein single - Block für einen Thread parallel for - Kombi parallel & for task - Erstellen von tasks 8 / 29

Hello World Konzept Syntax Hello World++ #pragma omp <Direktive> [Klausel,... ] master Block für Master-Thread critical Block für einen Thread gleichzeitig barrier Barriere für alle Threads taskwait Warte auf beenden der tasks atomic garantiere Atomare Speicherbehandlung flush Schreibe Thread-Variablen ordered Durchlaufe Block in Schleife sortiert threadprivate Kopiere Variablen in für T. private 9 / 29

Hello World Konzept Syntax Hello World++ #pragma omp <Direktive> [Klausel,... ] Klauseln: shared (list) private (list) firstprivate (list) Initialisierung aller private lastprivate (list) Update nach Ende der Region reduction (operator:list) Update nach Ende der Region nach Regel 10 / 29

Hello World Konzept Syntax Hello World++ i n t main ( i n t argc, char argv ) { i n t a [ 5 ], i, x =1; #pragma omp p a r a l l e l for shared ( x ) for ( i =0; i < 5; i ++) { p r i n t f ( " S c h r i t t %d \ n ", i ) ; sleep ( 1 ) ; a [ i ] = x = x+x ; } for ( i =0; i <5; p r i n t f ( " a[%d ] = %d \ n ", i, a [ i + + ] ) ) ; return (EXIT_SUCCESS ) ; } 1 2 3 4 5 6 7 8 9 10 11 12 13 11 / 29

Hello World Konzept Syntax Hello World++ mschoepf@caesar$ gcc -o zweitesbeispiel-omp -fopenmp zweitesbeispiel.c mschoepf@caesar$ gcc -o zweitesbeispiel-serial zweitesbeispiel.c mschoepf@caesar$ time./zweitesbeispiel-serial Schritt 0 Schritt 1 Schritt 2 Schritt 3 Schritt 4 a[1] = 2 a[2] = 4 a[3] = 8 a[4] = 16 a[5] = 32 real 0m5.001s 12 / 29

Hello World Konzept Syntax Hello World++ mschoepf@caesar$ time./zweitesbeispiel-omp Schritt 0 Schritt 2 Schritt 4 Schritt 1 Schritt 3 a[1] = 2 a[2] = 16 a[3] = 4 a[4] = 32 a[5] = 8 real 0m2.002s 13 / 29

Hello World Konzept Syntax Hello World++ i n t main ( i n t argc, char argv ) { i n t id, i ; omp_set_num_threads ( 4 ) ; #pragma omp p a r a l l e l for p r i v a t e ( i d ) for ( i = 0; i < 4; ++ i ) { i d = omp_get_thread_num ( ) ; p r i n t f ( " Hello World from thread %d \ n ", i d ) ; #pragma omp b a r r i e r i f ( i d == 0) p r i n t f ( " There are %d threads \ n ", omp_get_num_threads ( ) ) ; } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 14 / 29

Hello World Konzept Syntax Hello World++ mschoepf@caesar: $ gcc -o drittesbeispiel -fopenmp drittesbeispiel.c mschoepf@caesar: $./drittesbeispiel Hello World from thread 2 Hello World from thread 1 Hello World from thread 3 Hello World from thread 0 There are 4 threads 15 / 29

Hello World Konzept Syntax Hello World++ Was NICHT kann: Auf verteilten Speicher zugreifen Speichereffizienz garantieren 16 / 29

Hello World Konzept Syntax Hello World++ Was NICHT kann: Auf verteilten Speicher zugreifen Speichereffizienz garantieren Garantie gleichen Verhaltens verschiedener Implementationen 16 / 29

Hello World Konzept Syntax Hello World++ Was NICHT kann: Auf verteilten Speicher zugreifen Speichereffizienz garantieren Garantie gleichen Verhaltens verschiedener Implementationen Prüfen von Datenkonsistenz, Abhängigkeiten, deadlocks, race conditions 16 / 29

Hello World Konzept Syntax Hello World++ Was NICHT kann: Auf verteilten Speicher zugreifen Speichereffizienz garantieren Garantie gleichen Verhaltens verschiedener Implementationen Prüfen von Datenkonsistenz, Abhängigkeiten, deadlocks, race conditions Synchronisierte I/O 16 / 29

Hello World Konzept Syntax Hello World++ Was NICHT kann: Auf verteilten Speicher zugreifen Speichereffizienz garantieren Garantie gleichen Verhaltens verschiedener Implementationen Prüfen von Datenkonsistenz, Abhängigkeiten, deadlocks, race conditions Synchronisierte I/O 16 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Message Passing Interface - Standard zur Nachrichtenübertragung Ziele: Effizienz, Portabilität, Flexibilität 17 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Message Passing Interface - Standard zur Nachrichtenübertragung Ziele: Effizienz, Portabilität, Flexibilität Forum: IBM, Intel, HP, ncube s Vertex, p4, Zipcode, Chimp, PVM, Chameleon, PICL,... 17 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Message Passing Interface - Standard zur Nachrichtenübertragung Ziele: Effizienz, Portabilität, Flexibilität Forum: IBM, Intel, HP, ncube s Vertex, p4, Zipcode, Chimp, PVM, Chameleon, PICL,... Seit 1995: 1.0, danach 1.1, 1.2 und 2.0 17 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Message Passing Interface - Standard zur Nachrichtenübertragung Ziele: Effizienz, Portabilität, Flexibilität Forum: IBM, Intel, HP, ncube s Vertex, p4, Zipcode, Chimp, PVM, Chameleon, PICL,... Seit 1995: 1.0, danach 1.1, 1.2 und 2.0 Freie Implementationen verfügbar: lam-mpi, CH, Open (lam-mpi Nachfolger)... 17 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Message Passing Interface - Standard zur Nachrichtenübertragung Ziele: Effizienz, Portabilität, Flexibilität Forum: IBM, Intel, HP, ncube s Vertex, p4, Zipcode, Chimp, PVM, Chameleon, PICL,... Seit 1995: 1.0, danach 1.1, 1.2 und 2.0 Freie Implementationen verfügbar: lam-mpi, CH, Open (lam-mpi Nachfolger)... Eine API mit Vorwärtskompabilität 17 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Message Passing Interface - Standard zur Nachrichtenübertragung Ziele: Effizienz, Portabilität, Flexibilität Forum: IBM, Intel, HP, ncube s Vertex, p4, Zipcode, Chimp, PVM, Chameleon, PICL,... Seit 1995: 1.0, danach 1.1, 1.2 und 2.0 Freie Implementationen verfügbar: lam-mpi, CH, Open (lam-mpi Nachfolger)... Eine API mit Vorwärtskompabilität API gesichert durch Gremium ( Forum) 17 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Message Passing Interface - Standard zur Nachrichtenübertragung Ziele: Effizienz, Portabilität, Flexibilität Forum: IBM, Intel, HP, ncube s Vertex, p4, Zipcode, Chimp, PVM, Chameleon, PICL,... Seit 1995: 1.0, danach 1.1, 1.2 und 2.0 Freie Implementationen verfügbar: lam-mpi, CH, Open (lam-mpi Nachfolger)... Eine API mit Vorwärtskompabilität API gesichert durch Gremium ( Forum) Damit Sourcecode-kompabilität 17 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Message Passing Interface - Standard zur Nachrichtenübertragung Ziele: Effizienz, Portabilität, Flexibilität Forum: IBM, Intel, HP, ncube s Vertex, p4, Zipcode, Chimp, PVM, Chameleon, PICL,... Seit 1995: 1.0, danach 1.1, 1.2 und 2.0 Freie Implementationen verfügbar: lam-mpi, CH, Open (lam-mpi Nachfolger)... Eine API mit Vorwärtskompabilität API gesichert durch Gremium ( Forum) Damit Sourcecode-kompabilität C, C++, Fortran 17 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Message Passing Interface - Standard zur Nachrichtenübertragung Ziele: Effizienz, Portabilität, Flexibilität Forum: IBM, Intel, HP, ncube s Vertex, p4, Zipcode, Chimp, PVM, Chameleon, PICL,... Seit 1995: 1.0, danach 1.1, 1.2 und 2.0 Freie Implementationen verfügbar: lam-mpi, CH, Open (lam-mpi Nachfolger)... Eine API mit Vorwärtskompabilität API gesichert durch Gremium ( Forum) Damit Sourcecode-kompabilität C, C++, Fortran 17 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Kommunikation auf Prozessebene Shared Memory, TCP,... Implementationen übernehmen: 18 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Kommunikation auf Prozessebene Shared Memory, TCP,... Implementationen übernehmen: Verteilen der Prozesse (bspw. mit rsh/ssh) 18 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Kommunikation auf Prozessebene Shared Memory, TCP,... Implementationen übernehmen: Verteilen der Prozesse (bspw. mit rsh/ssh) Wahl des Kommunikationsmediums 18 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Kommunikation auf Prozessebene Shared Memory, TCP,... Implementationen übernehmen: Verteilen der Prozesse (bspw. mit rsh/ssh) Wahl des Kommunikationsmediums 18 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Vorbedingungen Erster -Aufruf: _Init () Bewirkt u.a. Erstellung von _COMM_WORLD 19 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Vorbedingungen Erster -Aufruf: _Init () Bewirkt u.a. Erstellung von _COMM_WORLD Letzter ()-Aufruf _Finalize () 19 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Vorbedingungen Erster -Aufruf: _Init () Bewirkt u.a. Erstellung von _COMM_WORLD Letzter ()-Aufruf _Finalize () -Programme können mit extra Wrappern gebaut werden (mpicc, mpicxx, mpif77). 19 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Vorbedingungen Erster -Aufruf: _Init () Bewirkt u.a. Erstellung von _COMM_WORLD Letzter ()-Aufruf _Finalize () -Programme können mit extra Wrappern gebaut werden (mpicc, mpicxx, mpif77). -Programme werden mit einem Helfer verteilt und gestartet: mpirun -np 4 -hostfile hostfile.txt executable 19 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Vorbedingungen Erster -Aufruf: _Init () Bewirkt u.a. Erstellung von _COMM_WORLD Letzter ()-Aufruf _Finalize () -Programme können mit extra Wrappern gebaut werden (mpicc, mpicxx, mpif77). -Programme werden mit einem Helfer verteilt und gestartet: mpirun -np 4 -hostfile hostfile.txt executable 19 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Erstes Beispiel #include <mpi. h> i n t main ( i n t argc, char argv ) { i n t i e r r o r, rank, size ; i e r r o r = M P I _Init (& argc,& argv ) ; i f ( i e r r o r!= _SUCCESS) schade ( ) ; _Comm_rank (_COMM_WORLD, &rank ) ; _Comm_size (_COMM_WORLD, & s i z e ) ; _Finalize ( ) ; return (EXIT_SUCCESS ) ; } 1 2 3 4 5 6 7 8 9 10 11 12 20 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation synchron Sender blockiert, bis Empfänger Nachricht erhalten hat asynchron Sender schickt Nachricht ohne auf die Rückmeldung des Empfängers zu warten 21 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation synchron Sender blockiert, bis Empfänger Nachricht erhalten hat asynchron Sender schickt Nachricht ohne auf die Rückmeldung des Empfängers zu warten Wichtig In braucht jedes SEND ein entsprechendes RECEIVE. 21 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation synchron Sender blockiert, bis Empfänger Nachricht erhalten hat asynchron Sender schickt Nachricht ohne auf die Rückmeldung des Empfängers zu warten Wichtig In braucht jedes SEND ein entsprechendes RECEIVE. 21 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Send (blocking) _Send (void *buf, int count, _Datatype datatype, int dest, int tag, _Comm comm)) (Standard: Entweder buffered oder synchron) _Ssend (...) (Synchron) 22 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Send (blocking) _Send (void *buf, int count, _Datatype datatype, int dest, int tag, _Comm comm)) (Standard: Entweder buffered oder synchron) _Ssend (...) (Synchron) _Bsend (...) (Buffered) 22 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Send (blocking) _Send (void *buf, int count, _Datatype datatype, int dest, int tag, _Comm comm)) (Standard: Entweder buffered oder synchron) _Ssend (...) (Synchron) _Bsend (...) (Buffered) _Rsend (...) (Ready) 22 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Send (blocking) _Send (void *buf, int count, _Datatype datatype, int dest, int tag, _Comm comm)) (Standard: Entweder buffered oder synchron) _Ssend (...) (Synchron) _Bsend (...) (Buffered) _Rsend (...) (Ready) 22 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Send (non-blocking) _Isend (void *buf, int count, _Datatype datatype, int dest, int tag, _Comm comm, _Request *request) _Issend (...) (Synchron) 23 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Send (non-blocking) _Isend (void *buf, int count, _Datatype datatype, int dest, int tag, _Comm comm, _Request *request) _Issend (...) (Synchron) _Ibsend (...) (Buffered) 23 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Send (non-blocking) _Isend (void *buf, int count, _Datatype datatype, int dest, int tag, _Comm comm, _Request *request) _Issend (...) (Synchron) _Ibsend (...) (Buffered) _Irsend (...) (Ready) 23 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Send (non-blocking) _Isend (void *buf, int count, _Datatype datatype, int dest, int tag, _Comm comm, _Request *request) _Issend (...) (Synchron) _Ibsend (...) (Buffered) _Irsend (...) (Ready) Statusabfrage mit _Wait() oder _Test() 23 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Send (non-blocking) _Isend (void *buf, int count, _Datatype datatype, int dest, int tag, _Comm comm, _Request *request) _Issend (...) (Synchron) _Ibsend (...) (Buffered) _Irsend (...) (Ready) Statusabfrage mit _Wait() oder _Test() 23 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Receive: _Recv () (blocking) _Irecv () (non-blocking) 24 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Receive: _Recv () (blocking) _Irecv () (non-blocking) Es können beide Varianten gemischt benutz werden. 24 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Receive: _Recv () (blocking) _Irecv () (non-blocking) Es können beide Varianten gemischt benutz werden. _Waitany () _Testany () _Waitall () _Testall () _Waitsome () _Testsome () 24 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Receive: _Recv () (blocking) _Irecv () (non-blocking) Es können beide Varianten gemischt benutz werden. _Waitany () _Testany () _Waitall () _Testall () _Waitsome () _Testsome () 24 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation #define t o _ r i g h t 201 #define t o _ l e f t 102 i n t main ( i n t argc, char argv [ ] ) { i n t right, l e f t, rank, my_rank, size, other, i, sum ; _Status send_status, recv_status ; _Request request ; M P I_Init (& argc, &argv ) ; _Comm_rank (_COMM_WORLD, &my_rank ) ; _Comm_size (_COMM_WORLD, &size ) ; r i g h t = ( my_rank + 1) % size ; l e f t = ( my_rank 1) % size ; sum = 0; rank = my_rank ; for ( i = 0; i < size ; i ++) { _Issend (& rank, 1, _INT, right, to_ right,_comm_world, &request ) ; _Recv(& other, 1, _INT, l e f t, to_ right, _COMM_WORLD, &recv_status ) ; _Wait(& request, &send_status ) ; sum += other ; rank = other ; } p r i n t f ( "PE %d : \ t Sum = %d \ n ", rank, sum ) ; _Finalize ( ) ; return (EXIT_SUCCESS ) ; } 25 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Datentypen: Basic, Vektoren, Structs,... Topologien: Prozesse bspw. Carthesisch anordnenbar bishin zu allgemeinen Graphen _Barrier() analog zu 26 / 29

Vorgeplänkel Erstes Beispiel Kollektive Kommunikation Deutliche Unterschiede zu Point-to-Point: Immer über einen Communicator (z.b. _COMM_WORLD) Alle Prozesse müssen kommunizieren Mit oder ohne Synchronisation Nur blocking möglich Keine Tags Receive buffer müssen exakt die richtige Größe haben _Bcast(), _Scatter(), _Gather, _Reduce(), _All_to_all() 27 / 29

2003: 16 PCs unter brachten 0.5 GFLOPS (AG NI) 2009: 1 QuadCore bringt 3.2 GFLOPS () bzw. 2.0 () (vgl. 1.2 GFLOPS Single Thread) Mittels einfache Parallelisierung (parallel for / sections) Mittel bspw. durch Master-Worker Aufteilung Nutzung großer Rechenrescourcen BTW: & können zusammen benutzt werden 28 / 29

Writing Message-Passing Parallel Programs with - University of Edinburgh - http://www.lrz-muenchen.de/services/software/parallel/mpi /epcc-course/ -Primer / Developing with LAM- - University of Ohio - http://www.lam-mpi.org Cluster Quick Start Version 0.1 - Douglas Eadline - http://www.xtreme-machines.com/x-cluster-qs.html Message Passing Interface () FAQ - comp.parallel.mpi - http://www.faqs.org/faqs/mpi-faq/ Forum - http://www.mpi-forum.org Wikipedia www.openmp.org 29 / 29