Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World...

81
Einleitung OpenMP MPI Zusammenfassung Parallel Processing in a Nutshell – OpenMP & MPI kurz vorgestellt 16. Juni 2009 1 / 29

Transcript of Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World...

Page 1: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Parallel Processing in a Nutshell – OpenMP& MPI kurz vorgestellt

16. Juni 2009

1 / 29

Page 2: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

1 Das Problem

2 OpenMP

3 MPI

4 Zusammenfassung

2 / 29

Page 3: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

1 Das Problem

2 OpenMP

3 MPI

4 Zusammenfassung

2 / 29

Page 4: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

1 Das Problem

2 OpenMP

3 MPI

4 Zusammenfassung

2 / 29

Page 5: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

1 Das Problem

2 OpenMP

3 MPI

4 Zusammenfassung

2 / 29

Page 6: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Multi-Core Prozessoren halten Einzug (nicht nur) auf demDesktopNeuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen-> 128 Kerne)Ziele:

Zeitkritische Anwendungen von Multi Core profitieren lassen“Langläufer” optimal auf vorhandene Rechenresourcenverteilen

Lösungen (naiv)

Zeitkritische Sektionen in mehrere Threads aufteilenVerteilen der Jobs per Hand oder in Skripten

3 / 29

Page 7: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Multi-Core Prozessoren halten Einzug (nicht nur) auf demDesktopNeuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen-> 128 Kerne)Ziele:

Zeitkritische Anwendungen von Multi Core profitieren lassen

“Langläufer” optimal auf vorhandene Rechenresourcenverteilen

Lösungen (naiv)

Zeitkritische Sektionen in mehrere Threads aufteilenVerteilen der Jobs per Hand oder in Skripten

3 / 29

Page 8: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Multi-Core Prozessoren halten Einzug (nicht nur) auf demDesktopNeuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen-> 128 Kerne)Ziele:

Zeitkritische Anwendungen von Multi Core profitieren lassen“Langläufer” optimal auf vorhandene Rechenresourcenverteilen

Lösungen (naiv)

Zeitkritische Sektionen in mehrere Threads aufteilenVerteilen der Jobs per Hand oder in Skripten

3 / 29

Page 9: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Multi-Core Prozessoren halten Einzug (nicht nur) auf demDesktopNeuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen-> 128 Kerne)Ziele:

Zeitkritische Anwendungen von Multi Core profitieren lassen“Langläufer” optimal auf vorhandene Rechenresourcenverteilen

Lösungen (naiv)Zeitkritische Sektionen in mehrere Threads aufteilen

Verteilen der Jobs per Hand oder in Skripten

3 / 29

Page 10: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Multi-Core Prozessoren halten Einzug (nicht nur) auf demDesktopNeuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen-> 128 Kerne)Ziele:

Zeitkritische Anwendungen von Multi Core profitieren lassen“Langläufer” optimal auf vorhandene Rechenresourcenverteilen

Lösungen (naiv)Zeitkritische Sektionen in mehrere Threads aufteilenVerteilen der Jobs per Hand oder in Skripten

3 / 29

Page 11: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Multi-Core Prozessoren halten Einzug (nicht nur) auf demDesktopNeuer Rechencluster des CITEC (16 Nodes mit je 8 Kernen-> 128 Kerne)Ziele:

Zeitkritische Anwendungen von Multi Core profitieren lassen“Langläufer” optimal auf vorhandene Rechenresourcenverteilen

Lösungen (naiv)Zeitkritische Sektionen in mehrere Threads aufteilenVerteilen der Jobs per Hand oder in Skripten

3 / 29

Page 12: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

API (C, C++, Fortran), von diversen Hard- undSoftwareherstellern entwickelt und behütet (AMD, Cray,Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft, ...)OpenMP besteht aus:

Compiler-Direktiven (#PRAGMA)

Runtime-Library-RoutinenUmgebungsvariablen

Multi-Threading auf Unix/Windows NT Plattformen mitSHARED MemoryOpenMP per Kommandozeilenoption bspw. des GCCeinschaltbar (-fopenmp)Vorteile:

Programm compiliert/läuft auch seriellProgrammteile lassen sich leicht parallelisierenThreadanzahl muss nicht (aber kann) vorher festgelegt werden

4 / 29

Page 13: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

API (C, C++, Fortran), von diversen Hard- undSoftwareherstellern entwickelt und behütet (AMD, Cray,Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft, ...)OpenMP besteht aus:

Compiler-Direktiven (#PRAGMA)Runtime-Library-Routinen

UmgebungsvariablenMulti-Threading auf Unix/Windows NT Plattformen mitSHARED MemoryOpenMP per Kommandozeilenoption bspw. des GCCeinschaltbar (-fopenmp)Vorteile:

Programm compiliert/läuft auch seriellProgrammteile lassen sich leicht parallelisierenThreadanzahl muss nicht (aber kann) vorher festgelegt werden

4 / 29

Page 14: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

API (C, C++, Fortran), von diversen Hard- undSoftwareherstellern entwickelt und behütet (AMD, Cray,Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft, ...)OpenMP besteht aus:

Compiler-Direktiven (#PRAGMA)Runtime-Library-RoutinenUmgebungsvariablen

Multi-Threading auf Unix/Windows NT Plattformen mitSHARED MemoryOpenMP per Kommandozeilenoption bspw. des GCCeinschaltbar (-fopenmp)Vorteile:

Programm compiliert/läuft auch seriellProgrammteile lassen sich leicht parallelisierenThreadanzahl muss nicht (aber kann) vorher festgelegt werden

4 / 29

Page 15: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

API (C, C++, Fortran), von diversen Hard- undSoftwareherstellern entwickelt und behütet (AMD, Cray,Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft, ...)OpenMP besteht aus:

Compiler-Direktiven (#PRAGMA)Runtime-Library-RoutinenUmgebungsvariablen

Multi-Threading auf Unix/Windows NT Plattformen mitSHARED Memory

OpenMP per Kommandozeilenoption bspw. des GCCeinschaltbar (-fopenmp)Vorteile:

Programm compiliert/läuft auch seriellProgrammteile lassen sich leicht parallelisierenThreadanzahl muss nicht (aber kann) vorher festgelegt werden

4 / 29

Page 16: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

API (C, C++, Fortran), von diversen Hard- undSoftwareherstellern entwickelt und behütet (AMD, Cray,Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft, ...)OpenMP besteht aus:

Compiler-Direktiven (#PRAGMA)Runtime-Library-RoutinenUmgebungsvariablen

Multi-Threading auf Unix/Windows NT Plattformen mitSHARED MemoryOpenMP per Kommandozeilenoption bspw. des GCCeinschaltbar (-fopenmp)Vorteile:

Programm compiliert/läuft auch seriellProgrammteile lassen sich leicht parallelisierenThreadanzahl muss nicht (aber kann) vorher festgelegt werden

4 / 29

Page 17: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

API (C, C++, Fortran), von diversen Hard- undSoftwareherstellern entwickelt und behütet (AMD, Cray,Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft, ...)OpenMP besteht aus:

Compiler-Direktiven (#PRAGMA)Runtime-Library-RoutinenUmgebungsvariablen

Multi-Threading auf Unix/Windows NT Plattformen mitSHARED MemoryOpenMP per Kommandozeilenoption bspw. des GCCeinschaltbar (-fopenmp)Vorteile:

Programm compiliert/läuft auch seriell

Programmteile lassen sich leicht parallelisierenThreadanzahl muss nicht (aber kann) vorher festgelegt werden

4 / 29

Page 18: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

API (C, C++, Fortran), von diversen Hard- undSoftwareherstellern entwickelt und behütet (AMD, Cray,Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft, ...)OpenMP besteht aus:

Compiler-Direktiven (#PRAGMA)Runtime-Library-RoutinenUmgebungsvariablen

Multi-Threading auf Unix/Windows NT Plattformen mitSHARED MemoryOpenMP per Kommandozeilenoption bspw. des GCCeinschaltbar (-fopenmp)Vorteile:

Programm compiliert/läuft auch seriellProgrammteile lassen sich leicht parallelisieren

Threadanzahl muss nicht (aber kann) vorher festgelegt werden

4 / 29

Page 19: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

API (C, C++, Fortran), von diversen Hard- undSoftwareherstellern entwickelt und behütet (AMD, Cray,Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft, ...)OpenMP besteht aus:

Compiler-Direktiven (#PRAGMA)Runtime-Library-RoutinenUmgebungsvariablen

Multi-Threading auf Unix/Windows NT Plattformen mitSHARED MemoryOpenMP per Kommandozeilenoption bspw. des GCCeinschaltbar (-fopenmp)Vorteile:

Programm compiliert/läuft auch seriellProgrammteile lassen sich leicht parallelisierenThreadanzahl muss nicht (aber kann) vorher festgelegt werden

4 / 29

Page 20: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

API (C, C++, Fortran), von diversen Hard- undSoftwareherstellern entwickelt und behütet (AMD, Cray,Fujitsu, HP, IBM, Intel, NEC, SGI, Sun, Microsoft, ...)OpenMP besteht aus:

Compiler-Direktiven (#PRAGMA)Runtime-Library-RoutinenUmgebungsvariablen

Multi-Threading auf Unix/Windows NT Plattformen mitSHARED MemoryOpenMP per Kommandozeilenoption bspw. des GCCeinschaltbar (-fopenmp)Vorteile:

Programm compiliert/läuft auch seriellProgrammteile lassen sich leicht parallelisierenThreadanzahl muss nicht (aber kann) vorher festgelegt werden

4 / 29

Page 21: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

1#include < s t d i o . h>2#include < s t d l i b . h>3i n t main ( i n t argc , char∗ argv [ ] )4{5#pragma omp p a r a l l e l6{7p r i n t f ( " Ha l lo Welt ! \ n " ) ;8}9return (EXIT_SUCCESS ) ;10}

5 / 29

Page 22: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

mschoepf@caesar$ gcc -o HelloWorld -fopenmpHelloWorld.cmschoepf@caesar$ ./HelloWorldHallo Welt!Hallo Welt!Hallo Welt!Hallo Welt!mschoepf@caesar$ ssh arminius ./HelloWorldHallo Welt!

6 / 29

Page 23: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

Durch explizite Compileranweisungen werdenProgrammsektionen in Threads (“team”) aufgeteilt.Der Speicherbereich wird “geshared”

Verschachtelte Parallelisierung von der API möglichDynamische Erhöhung/Reduzierung der Anzahl der ThreadsKEINE explizite Unterstützung von I/OThreads können ihre Daten “cachen”. Bei geteilten Variablenmuss ggf. explizit “geflushed” werden

7 / 29

Page 24: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

Durch explizite Compileranweisungen werdenProgrammsektionen in Threads (“team”) aufgeteilt.Der Speicherbereich wird “geshared”Verschachtelte Parallelisierung von der API möglich

Dynamische Erhöhung/Reduzierung der Anzahl der ThreadsKEINE explizite Unterstützung von I/OThreads können ihre Daten “cachen”. Bei geteilten Variablenmuss ggf. explizit “geflushed” werden

7 / 29

Page 25: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

Durch explizite Compileranweisungen werdenProgrammsektionen in Threads (“team”) aufgeteilt.Der Speicherbereich wird “geshared”Verschachtelte Parallelisierung von der API möglichDynamische Erhöhung/Reduzierung der Anzahl der Threads

KEINE explizite Unterstützung von I/OThreads können ihre Daten “cachen”. Bei geteilten Variablenmuss ggf. explizit “geflushed” werden

7 / 29

Page 26: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

Durch explizite Compileranweisungen werdenProgrammsektionen in Threads (“team”) aufgeteilt.Der Speicherbereich wird “geshared”Verschachtelte Parallelisierung von der API möglichDynamische Erhöhung/Reduzierung der Anzahl der ThreadsKEINE explizite Unterstützung von I/O

Threads können ihre Daten “cachen”. Bei geteilten Variablenmuss ggf. explizit “geflushed” werden

7 / 29

Page 27: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

Durch explizite Compileranweisungen werdenProgrammsektionen in Threads (“team”) aufgeteilt.Der Speicherbereich wird “geshared”Verschachtelte Parallelisierung von der API möglichDynamische Erhöhung/Reduzierung der Anzahl der ThreadsKEINE explizite Unterstützung von I/OThreads können ihre Daten “cachen”. Bei geteilten Variablenmuss ggf. explizit “geflushed” werden

7 / 29

Page 28: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

Durch explizite Compileranweisungen werdenProgrammsektionen in Threads (“team”) aufgeteilt.Der Speicherbereich wird “geshared”Verschachtelte Parallelisierung von der API möglichDynamische Erhöhung/Reduzierung der Anzahl der ThreadsKEINE explizite Unterstützung von I/OThreads können ihre Daten “cachen”. Bei geteilten Variablenmuss ggf. explizit “geflushed” werden

7 / 29

Page 29: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello 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

Page 30: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

#pragma omp <Direktive> [Klausel, ... ]

master – Block für Master-Threadcritical – Block für einen Thread gleichzeitigbarrier – Barriere für alle Threadstaskwait – Warte auf beenden der tasksatomic – garantiere “Atomare” Speicherbehandlungflush – Schreibe Thread-Variablenordered – Durchlaufe Block in Schleife sortiertthreadprivate – Kopiere Variablen in für T. private

9 / 29

Page 31: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

#pragma omp <Direktive> [Klausel, ... ]Klauseln:

shared (list)private (list)firstprivate (list) – Initialisierung aller privatelastprivate (list) – Update nach Ende der Regionreduction (operator:list) – Update nach Ende der Region nachRegel

10 / 29

Page 32: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

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

11 / 29

Page 33: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

mschoepf@caesar$ gcc -o zweitesbeispiel-omp -fopenmpzweitesbeispiel.cmschoepf@caesar$ gcc -o zweitesbeispiel-serial zweitesbeispiel.cmschoepf@caesar$ time ./zweitesbeispiel-serialSchritt 0Schritt 1Schritt 2Schritt 3Schritt 4a[1] = 2a[2] = 4a[3] = 8a[4] = 16a[5] = 32real 0m5.001s

12 / 29

Page 34: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

mschoepf@caesar$ time ./zweitesbeispiel-ompSchritt 0Schritt 2Schritt 4Schritt 1Schritt 3a[1] = 2a[2] = 16a[3] = 4a[4] = 32a[5] = 8real 0m2.002s

13 / 29

Page 35: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

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

14 / 29

Page 36: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

mschoepf@caesar: $ gcc -o drittesbeispiel -fopenmpdrittesbeispiel.cmschoepf@caesar: $ ./drittesbeispielHello World from thread 2Hello World from thread 1Hello World from thread 3Hello World from thread 0There are 4 threads

15 / 29

Page 37: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

Was OpenMP NICHT kann:Auf verteilten Speicher zugreifenSpeichereffizienz garantieren

Garantie gleichen Verhaltens verschiedenerImplementationenPrüfen von Datenkonsistenz, Abhängigkeiten, deadlocks, raceconditionsSynchronisierte I/O

16 / 29

Page 38: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

Was OpenMP NICHT kann:Auf verteilten Speicher zugreifenSpeichereffizienz garantierenGarantie gleichen Verhaltens verschiedenerImplementationen

Prüfen von Datenkonsistenz, Abhängigkeiten, deadlocks, raceconditionsSynchronisierte I/O

16 / 29

Page 39: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

Was OpenMP NICHT kann:Auf verteilten Speicher zugreifenSpeichereffizienz garantierenGarantie gleichen Verhaltens verschiedenerImplementationenPrüfen von Datenkonsistenz, Abhängigkeiten, deadlocks, raceconditions

Synchronisierte I/O

16 / 29

Page 40: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

Was OpenMP NICHT kann:Auf verteilten Speicher zugreifenSpeichereffizienz garantierenGarantie gleichen Verhaltens verschiedenerImplementationenPrüfen von Datenkonsistenz, Abhängigkeiten, deadlocks, raceconditionsSynchronisierte I/O

16 / 29

Page 41: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Hello WorldKonzeptSyntaxBeispiel 2Hello World++

Was OpenMP NICHT kann:Auf verteilten Speicher zugreifenSpeichereffizienz garantierenGarantie gleichen Verhaltens verschiedenerImplementationenPrüfen von Datenkonsistenz, Abhängigkeiten, deadlocks, raceconditionsSynchronisierte I/O

16 / 29

Page 42: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Message Passing Interface - Standard zurNachrichtenübertragungZiele: Effizienz, Portabilität, Flexibilität

MPI Forum: IBM, Intel, HP, nCUBE’s Vertex, p4, Zipcode,Chimp, PVM, Chameleon, PICL, . . .Seit 1995: MPI 1.0, danach MPI 1.1, 1.2 und 2.0Freie Implementationen verfügbar: lam-mpi, MPICH,OpenMPI (lam-mpi Nachfolger) . . .Eine API mit VorwärtskompabilitätAPI gesichert durch Gremium (MPI Forum)Damit Sourcecode-kompabilitätC, C++, Fortran

17 / 29

Page 43: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Message Passing Interface - Standard zurNachrichtenübertragungZiele: Effizienz, Portabilität, FlexibilitätMPI Forum: IBM, Intel, HP, nCUBE’s Vertex, p4, Zipcode,Chimp, PVM, Chameleon, PICL, . . .

Seit 1995: MPI 1.0, danach MPI 1.1, 1.2 und 2.0Freie Implementationen verfügbar: lam-mpi, MPICH,OpenMPI (lam-mpi Nachfolger) . . .Eine API mit VorwärtskompabilitätAPI gesichert durch Gremium (MPI Forum)Damit Sourcecode-kompabilitätC, C++, Fortran

17 / 29

Page 44: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Message Passing Interface - Standard zurNachrichtenübertragungZiele: Effizienz, Portabilität, FlexibilitätMPI Forum: IBM, Intel, HP, nCUBE’s Vertex, p4, Zipcode,Chimp, PVM, Chameleon, PICL, . . .Seit 1995: MPI 1.0, danach MPI 1.1, 1.2 und 2.0

Freie Implementationen verfügbar: lam-mpi, MPICH,OpenMPI (lam-mpi Nachfolger) . . .Eine API mit VorwärtskompabilitätAPI gesichert durch Gremium (MPI Forum)Damit Sourcecode-kompabilitätC, C++, Fortran

17 / 29

Page 45: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Message Passing Interface - Standard zurNachrichtenübertragungZiele: Effizienz, Portabilität, FlexibilitätMPI Forum: IBM, Intel, HP, nCUBE’s Vertex, p4, Zipcode,Chimp, PVM, Chameleon, PICL, . . .Seit 1995: MPI 1.0, danach MPI 1.1, 1.2 und 2.0Freie Implementationen verfügbar: lam-mpi, MPICH,OpenMPI (lam-mpi Nachfolger) . . .

Eine API mit VorwärtskompabilitätAPI gesichert durch Gremium (MPI Forum)Damit Sourcecode-kompabilitätC, C++, Fortran

17 / 29

Page 46: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Message Passing Interface - Standard zurNachrichtenübertragungZiele: Effizienz, Portabilität, FlexibilitätMPI Forum: IBM, Intel, HP, nCUBE’s Vertex, p4, Zipcode,Chimp, PVM, Chameleon, PICL, . . .Seit 1995: MPI 1.0, danach MPI 1.1, 1.2 und 2.0Freie Implementationen verfügbar: lam-mpi, MPICH,OpenMPI (lam-mpi Nachfolger) . . .Eine API mit Vorwärtskompabilität

API gesichert durch Gremium (MPI Forum)Damit Sourcecode-kompabilitätC, C++, Fortran

17 / 29

Page 47: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Message Passing Interface - Standard zurNachrichtenübertragungZiele: Effizienz, Portabilität, FlexibilitätMPI Forum: IBM, Intel, HP, nCUBE’s Vertex, p4, Zipcode,Chimp, PVM, Chameleon, PICL, . . .Seit 1995: MPI 1.0, danach MPI 1.1, 1.2 und 2.0Freie Implementationen verfügbar: lam-mpi, MPICH,OpenMPI (lam-mpi Nachfolger) . . .Eine API mit VorwärtskompabilitätAPI gesichert durch Gremium (MPI Forum)

Damit Sourcecode-kompabilitätC, C++, Fortran

17 / 29

Page 48: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Message Passing Interface - Standard zurNachrichtenübertragungZiele: Effizienz, Portabilität, FlexibilitätMPI Forum: IBM, Intel, HP, nCUBE’s Vertex, p4, Zipcode,Chimp, PVM, Chameleon, PICL, . . .Seit 1995: MPI 1.0, danach MPI 1.1, 1.2 und 2.0Freie Implementationen verfügbar: lam-mpi, MPICH,OpenMPI (lam-mpi Nachfolger) . . .Eine API mit VorwärtskompabilitätAPI gesichert durch Gremium (MPI Forum)Damit Sourcecode-kompabilität

C, C++, Fortran

17 / 29

Page 49: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Message Passing Interface - Standard zurNachrichtenübertragungZiele: Effizienz, Portabilität, FlexibilitätMPI Forum: IBM, Intel, HP, nCUBE’s Vertex, p4, Zipcode,Chimp, PVM, Chameleon, PICL, . . .Seit 1995: MPI 1.0, danach MPI 1.1, 1.2 und 2.0Freie Implementationen verfügbar: lam-mpi, MPICH,OpenMPI (lam-mpi Nachfolger) . . .Eine API mit VorwärtskompabilitätAPI gesichert durch Gremium (MPI Forum)Damit Sourcecode-kompabilitätC, C++, Fortran

17 / 29

Page 50: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Message Passing Interface - Standard zurNachrichtenübertragungZiele: Effizienz, Portabilität, FlexibilitätMPI Forum: IBM, Intel, HP, nCUBE’s Vertex, p4, Zipcode,Chimp, PVM, Chameleon, PICL, . . .Seit 1995: MPI 1.0, danach MPI 1.1, 1.2 und 2.0Freie Implementationen verfügbar: lam-mpi, MPICH,OpenMPI (lam-mpi Nachfolger) . . .Eine API mit VorwärtskompabilitätAPI gesichert durch Gremium (MPI Forum)Damit Sourcecode-kompabilitätC, C++, Fortran

17 / 29

Page 51: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Kommunikation auf ProzessebeneShared Memory, TCP, . . .Implementationen übernehmen:

Verteilen der Prozesse (bspw. mit rsh/ssh)Wahl des Kommunikationsmediums

18 / 29

Page 52: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Kommunikation auf ProzessebeneShared Memory, TCP, . . .Implementationen übernehmen:

Verteilen der Prozesse (bspw. mit rsh/ssh)

Wahl des Kommunikationsmediums

18 / 29

Page 53: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Kommunikation auf ProzessebeneShared Memory, TCP, . . .Implementationen übernehmen:

Verteilen der Prozesse (bspw. mit rsh/ssh)Wahl des Kommunikationsmediums

18 / 29

Page 54: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Kommunikation auf ProzessebeneShared Memory, TCP, . . .Implementationen übernehmen:

Verteilen der Prozesse (bspw. mit rsh/ssh)Wahl des Kommunikationsmediums

18 / 29

Page 55: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

VorbedingungenErster MPI-Aufruf: MPI_Init ()

Bewirkt u.a. Erstellung von MPI_COMM_WORLD

Letzter (MPI)-Aufruf MPI_Finalize ()

MPI-Programme können mit extra Wrappern gebaut werden(mpicc, mpicxx, mpif77).MPI-Programme werden mit einem Helfer verteilt undgestartet: mpirun -np 4 -hostfile hostfile.txtexecutable

19 / 29

Page 56: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

VorbedingungenErster MPI-Aufruf: MPI_Init ()

Bewirkt u.a. Erstellung von MPI_COMM_WORLD

Letzter (MPI)-Aufruf MPI_Finalize ()

MPI-Programme können mit extra Wrappern gebaut werden(mpicc, mpicxx, mpif77).MPI-Programme werden mit einem Helfer verteilt undgestartet: mpirun -np 4 -hostfile hostfile.txtexecutable

19 / 29

Page 57: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

VorbedingungenErster MPI-Aufruf: MPI_Init ()

Bewirkt u.a. Erstellung von MPI_COMM_WORLD

Letzter (MPI)-Aufruf MPI_Finalize ()

MPI-Programme können mit extra Wrappern gebaut werden(mpicc, mpicxx, mpif77).

MPI-Programme werden mit einem Helfer verteilt undgestartet: mpirun -np 4 -hostfile hostfile.txtexecutable

19 / 29

Page 58: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

VorbedingungenErster MPI-Aufruf: MPI_Init ()

Bewirkt u.a. Erstellung von MPI_COMM_WORLD

Letzter (MPI)-Aufruf MPI_Finalize ()

MPI-Programme können mit extra Wrappern gebaut werden(mpicc, mpicxx, mpif77).MPI-Programme werden mit einem Helfer verteilt undgestartet: mpirun -np 4 -hostfile hostfile.txtexecutable

19 / 29

Page 59: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

VorbedingungenErster MPI-Aufruf: MPI_Init ()

Bewirkt u.a. Erstellung von MPI_COMM_WORLD

Letzter (MPI)-Aufruf MPI_Finalize ()

MPI-Programme können mit extra Wrappern gebaut werden(mpicc, mpicxx, mpif77).MPI-Programme werden mit einem Helfer verteilt undgestartet: mpirun -np 4 -hostfile hostfile.txtexecutable

19 / 29

Page 60: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Erstes Beispiel

1#include <mpi . h>2i n t main ( i n t argc , char∗∗ argv )3{4i n t i e r r o r , rank , s i ze ;5i e r r o r = MPI_ In i t (& argc ,& argv ) ;6i f ( i e r r o r != MPI_SUCCESS)7schade ( ) ;8MPI_Comm_rank (MPI_COMM_WORLD, &rank ) ;9MPI_Comm_size (MPI_COMM_WORLD, &s ize ) ;10MPI_Final ize ( ) ;11return (EXIT_SUCCESS ) ;12}

20 / 29

Page 61: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Point-to-Point Kommunikation

synchron Sender blockiert, bis Empfänger Nachricht erhaltenhat

asynchron Sender schickt Nachricht ohne auf die Rückmeldungdes Empfängers zu warten

Wichtig In MPI braucht jedes SEND ein entsprechendesRECEIVE.

21 / 29

Page 62: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Point-to-Point Kommunikation

synchron Sender blockiert, bis Empfänger Nachricht erhaltenhat

asynchron Sender schickt Nachricht ohne auf die Rückmeldungdes Empfängers zu warten

Wichtig In MPI braucht jedes SEND ein entsprechendesRECEIVE.

21 / 29

Page 63: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Point-to-Point Kommunikation

synchron Sender blockiert, bis Empfänger Nachricht erhaltenhat

asynchron Sender schickt Nachricht ohne auf die Rückmeldungdes Empfängers zu warten

Wichtig In MPI braucht jedes SEND ein entsprechendesRECEIVE.

21 / 29

Page 64: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Send (blocking)MPI_Send (void *buf, int count, MPI_Datatypedatatype, int dest, int tag, MPI_Comm comm))(Standard: Entweder buffered oder synchron)MPI_Ssend (...) (Synchron)

MPI_Bsend (...) (Buffered)MPI_Rsend (...) (Ready)

22 / 29

Page 65: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Send (blocking)MPI_Send (void *buf, int count, MPI_Datatypedatatype, int dest, int tag, MPI_Comm comm))(Standard: Entweder buffered oder synchron)MPI_Ssend (...) (Synchron)MPI_Bsend (...) (Buffered)

MPI_Rsend (...) (Ready)

22 / 29

Page 66: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Send (blocking)MPI_Send (void *buf, int count, MPI_Datatypedatatype, int dest, int tag, MPI_Comm comm))(Standard: Entweder buffered oder synchron)MPI_Ssend (...) (Synchron)MPI_Bsend (...) (Buffered)MPI_Rsend (...) (Ready)

22 / 29

Page 67: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Send (blocking)MPI_Send (void *buf, int count, MPI_Datatypedatatype, int dest, int tag, MPI_Comm comm))(Standard: Entweder buffered oder synchron)MPI_Ssend (...) (Synchron)MPI_Bsend (...) (Buffered)MPI_Rsend (...) (Ready)

22 / 29

Page 68: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Send (non-blocking)

MPI_Isend (void *buf, int count, MPI_Datatypedatatype, int dest, int tag, MPI_Comm comm,MPI_Request *request)

MPI_Issend (...) (Synchron)

MPI_Ibsend (...) (Buffered)MPI_Irsend (...) (Ready)Statusabfrage mit MPI_Wait() oder MPI_Test()

23 / 29

Page 69: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Send (non-blocking)

MPI_Isend (void *buf, int count, MPI_Datatypedatatype, int dest, int tag, MPI_Comm comm,MPI_Request *request)

MPI_Issend (...) (Synchron)MPI_Ibsend (...) (Buffered)

MPI_Irsend (...) (Ready)Statusabfrage mit MPI_Wait() oder MPI_Test()

23 / 29

Page 70: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Send (non-blocking)

MPI_Isend (void *buf, int count, MPI_Datatypedatatype, int dest, int tag, MPI_Comm comm,MPI_Request *request)

MPI_Issend (...) (Synchron)MPI_Ibsend (...) (Buffered)MPI_Irsend (...) (Ready)

Statusabfrage mit MPI_Wait() oder MPI_Test()

23 / 29

Page 71: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Send (non-blocking)

MPI_Isend (void *buf, int count, MPI_Datatypedatatype, int dest, int tag, MPI_Comm comm,MPI_Request *request)

MPI_Issend (...) (Synchron)MPI_Ibsend (...) (Buffered)MPI_Irsend (...) (Ready)Statusabfrage mit MPI_Wait() oder MPI_Test()

23 / 29

Page 72: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Send (non-blocking)

MPI_Isend (void *buf, int count, MPI_Datatypedatatype, int dest, int tag, MPI_Comm comm,MPI_Request *request)

MPI_Issend (...) (Synchron)MPI_Ibsend (...) (Buffered)MPI_Irsend (...) (Ready)Statusabfrage mit MPI_Wait() oder MPI_Test()

23 / 29

Page 73: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Receive:MPI_Recv () (blocking)MPI_Irecv () (non-blocking)

Es können beide Varianten gemischt benutz werden.MPI_Waitany ()

MPI_Testany ()

MPI_Waitall ()

MPI_Testall ()

MPI_Waitsome ()

MPI_Testsome ()

24 / 29

Page 74: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Receive:MPI_Recv () (blocking)MPI_Irecv () (non-blocking)Es können beide Varianten gemischt benutz werden.

MPI_Waitany ()

MPI_Testany ()

MPI_Waitall ()

MPI_Testall ()

MPI_Waitsome ()

MPI_Testsome ()

24 / 29

Page 75: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Receive:MPI_Recv () (blocking)MPI_Irecv () (non-blocking)Es können beide Varianten gemischt benutz werden.MPI_Waitany ()

MPI_Testany ()

MPI_Waitall ()

MPI_Testall ()

MPI_Waitsome ()

MPI_Testsome ()

24 / 29

Page 76: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Receive:MPI_Recv () (blocking)MPI_Irecv () (non-blocking)Es können beide Varianten gemischt benutz werden.MPI_Waitany ()

MPI_Testany ()

MPI_Waitall ()

MPI_Testall ()

MPI_Waitsome ()

MPI_Testsome ()

24 / 29

Page 77: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

#define t o _ r i g h t 201#define t o _ l e f t 102i n t main ( i n t argc , char ∗argv [ ] ){

i n t r i g h t , l e f t , rank , my_rank , s ize , other , i , sum;MPI_Status send_status , recv_s ta tus ;MPI_Request request ;MPI_ In i t (& argc , &argv ) ;MPI_Comm_rank (MPI_COMM_WORLD, &my_rank ) ;MPI_Comm_size (MPI_COMM_WORLD, &s ize ) ;r i g h t = ( my_rank + 1) % s ize ;l e f t = ( my_rank − 1) % s ize ;sum = 0;rank = my_rank ;for ( i = 0 ; i < s ize ; i ++) {

MPI_Issend (& rank , 1 , MPI_INT , r i g h t , t o _ r i g h t ,MPI_COMM_WORLD,&request ) ;MPI_Recv(& other , 1 , MPI_INT , l e f t , t o _ r i g h t , MPI_COMM_WORLD,&recv_s ta tus ) ;MPI_Wait (& request , &send_status ) ;sum += other ;rank = other ;

}p r i n t f ( "PE %d : \ t Sum = %d \ n " , rank , sum ) ;MPI_Final ize ( ) ;return (EXIT_SUCCESS ) ;

}

25 / 29

Page 78: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Datentypen: Basic, Vektoren, Structs, . . .Topologien: Prozesse bspw. Carthesisch anordnenbar bishinzu allgemeinen GraphenMPI_Barrier() analog zu OpenMP

26 / 29

Page 79: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

VorgeplänkelErstes BeispielPoint-to-Point KommunikationBeispiel 2Kollektive Kommunikation

Deutliche Unterschiede zu Point-to-Point:Immer über einen Communicator (z.B. MPI_COMM_WORLD)Alle Prozesse müssen kommunizierenMit oder ohne SynchronisationNur “blocking” möglichKeine “Tags”Receive buffer müssen exakt die richtige Größe habenMPI_Bcast(), MPI_Scatter(), MPI_Gather,MPI_Reduce(), MPI_All_to_all()

27 / 29

Page 80: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

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

28 / 29

Page 81: Parallel Processing in a Nutshell -- OpenMP & MPI kurz ...€¦ · MPI Zusammenfassung Hello World Konzept Syntax Beispiel 2 Hello World++ API (C, C++, Fortran), von diversen Hard-

EinleitungOpenMPMPIZusammenfassung

Writing Message-Passing Parallel Programs with MPI -University of Edinburgh -http://www.lrz-muenchen.de/services/software/parallel/mpi

/epcc-course/

MPI-Primer / Developing with LAM-MPI - 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 (MPI) FAQ - comp.parallel.mpi -http://www.faqs.org/faqs/mpi-faq/

MPI Forum - http://www.mpi-forum.orgWikipediawww.openmp.org

29 / 29