exkurs: paralleles rechnen - uni-muenster.de · 2013. 12. 10. · exkurs: paralleles rechnen 11/27...
TRANSCRIPT
Exkurs: Paralleles Rechnen
Christian Engwer December 2, 2013wissen lebenWWU Munster
WestfalischeWilhelms-UniversitatMunster
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 2 /27
Warum parallel Rechnen ?
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 2 /27
Warum parallel Rechnen ?
JUQUEEN, FZ Julich, Platz 8 weltweit
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 2 /27
Warum parallel Rechnen ?
nur etwas fur spezial Anwendungen!
JUQUEEN, FZ Julich, Platz 8 weltweit
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 2 /27
Warum parallel Rechnen ?
wirklich?!
JUQUEEN, FZ Julich, Platz 8 weltweit
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 2 /27
Warum parallel Rechnen ?
Parallelrechner gibt es uberall!
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 3 /27
Wie hilft paralleles Rechnen ?I Nebenlaufigkeit
I Abarbeitung mehrerer Prozesse auf einem ProzessorI Multi-Tasking Betriebssysteme seit den 60er JahrenI Bedienung mehrerer Gerate und BenutzerI Ziel: Steigerung der AuslastungI “Hyperthreading”: Nutze Wartezeiten des ProzessorsI “Multi-Core” / “Multi-Processor”I Mehrere Dinge gleichzeitig: Web-Browser, DesktopI Koordinationsproblematik tritt bereits hier auf
I Verteilte AnwendungenI Datenbasis ist inharent verteilt: betriebswirtschaftliche
Software, Warenfluß in großen UnternehmenI Hier wichtig: plattformubergreifende Kommunikation,
Client-Server ArchitekturenI Auch wichtig: Sicherheit, VPN, etc. (behandeln wir nicht)
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 4 /27
Nicht mehr schneller, sondern mehr!
Kathy Yelick: Ten Ways to Waste a Parallel Computer
Keynote ISCA 2009. The 36th International Symposium on Computer Architecture (mit Daten von Kunle Olukotun, Lance
Hammond, Herb Sutter, Burton Smith, Chris Batten und Krste Asanovic)
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 5 /27
Zahl der Cores pro System wachst sehr schnell
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 6 /27
Es gibt sehr verschiedene Parallelrechner
I IBM BlueGene QI z.B. JUQUEEN im FZ Julich (Platz 8 weltweit)I einige unter den TOP 500
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 6 /27
Es gibt sehr verschiedene Parallelrechner
I 4× 12 Core AMD-OpteronI kann sich auch die Mathematik leisten ;-)
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 6 /27
Es gibt sehr verschiedene Parallelrechner
I Nvidia Geforce GTX 680I 1536 StreamprozessorenI 22. Marz 2012
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 6 /27
Es gibt sehr verschiedene Parallelrechner
I MobiltelefoneI Multi-Core ProzessorenI z.B. links: Android-Handy mit 1,5 GHz Dual-Core-CPU (∼ 300e)I rechts: Quad-Core Smartphone
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 7 /27
Paralleles Rechnen zur Wettersimulation
I Erste Idee eines Parallelrechners zur Wettervorhersagestammt von Lewis Fry Richardson
I Buch: Weather Prediction by Arithmetical Finite Differences(1916)
I An einzelnen Messpunkten werden Wetterdaten in versch.Hohen erhoben
I 64000 Messpunkte uber die Erde verteiltI Auflosung ca. 100 kmI Jeder Messpunkt sollte von einem Computer ausgewertet
werdenI Vorhersage fur den Folgetag
I Wurde nie umgesetzt, und hatte so auch nicht funktioniert
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 7 /27
Paralleles Rechnen zur Wettersimulation
I Erste Idee eines Parallelrechners zur Wettervorhersagestammt von Lewis Fry Richardson
I Buch: Weather Prediction by Arithmetical Finite Differences(1916)
I An einzelnen Messpunkten werden Wetterdaten in versch.Hohen erhoben
I 64000 Messpunkte uber die Erde verteiltI Auflosung ca. 100 kmI Jeder Messpunkt sollte von einem Computer ausgewertet
werdenI Vorhersage fur den FolgetagI Wurde nie umgesetzt, und hatte so auch nicht funktioniert
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 7 /27
Paralleles Rechnen zur Wettersimulation
Heute:I Deutscher Wetterdienst
I NEC SX-9 Vectorrechner (seit2009)
I ca. 11 TFlopsI Auflosung von 2,8 km
I EarthsimulatorI Japanischer SupercomputerI Klimasimulationen der gesamten
ErdeI Fuhrte von 2002 bis 2004 die
TOP 500 anI Upgrade 2009
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 7 /27
Paralleles Rechnen zur Wettersimulation
Heute:I Deutscher Wetterdienst
I NEC SX-9 Vectorrechner (seit2009)
I ca. 11 TFlopsI Auflosung von 2,8 km
I EarthsimulatorI Japanischer SupercomputerI Klimasimulationen der gesamten
ErdeI Fuhrte von 2002 bis 2004 die
TOP 500 anI Upgrade 2009
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 8 /27
Konzepte fur Parallelrechner
P
C
Verbindungsnetzwerk
Speicher M
P
C
P
C
I Gemeinsamer SpeicherI Verteilter Speicher
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 8 /27
Konzepte fur Parallelrechner
Verbindungsnetzwerk
P C M P C M
I Gemeinsamer SpeicherI Verteilter Speicher
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 9 /27
MPI: Message Passing Interface
I Portable Bibliothek zum NachrichtenaustauschI Wurde 1993-94 durch ein intern. Gremium entwickeltI 1997 wurde der Standard uberarbeitet (MPI2)I Open-Source Implementieren gibt beispielweise von:MPICH1 und OpenMPI2
I Eigenschaften von MPI:I Direkte Anbindung an C, C++ und FortranI verschiedene Arten von Punkt-zu-Punkt KommunikationI globale KommunikationI Daten Umwandlung in heterogenen SystemenI Virtuelle Netze & Topologien moglich
1http://www-unix.mcs.anl.gov/mpi/mpich
2http://www.open-mpi.org/
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 10 /27
Hello World
1 #include <mpi.h>
#include <iostream >
3
int main(int argc , char **argv)
5 {
int *buf , i, rank , nints , len;
7 char hostname [256];
9 MPI_Init (&argc ,&argv);
MPI_Comm_rank(MPI_COMM_WORLD , &rank);
11 gethostname(hostname ,255);
std::cout << "Hello world! I am process number: " << rank
13 << " on host " << hostname << std::endl;
MPI_Finalize ();
15 return 0;
}
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 11 /27
Kompilieren eines Programms
I Das Beispiel ist im SPMD-Stil geschrieben; der MPI Standardlegt dies nicht fest und man kann auch andere Paradigmenverwenden.
I Kompilieren eines MPI C-Programmes und starten mit 8Prozessen:
mpicc -o hello hello.c
mpirun -machinefile machines -np 8 hello
Die Liste der Computer steht in der Datei machines.
Fur C++ Programme heisst der Compiler
mpicxx -o hello hello.cc
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 12 /27
Initialisierung und Beenden
Bevor irgend ein MPI Befehl aufgerufen werden darf, muss MPI mitMPI_Init initialisiert werden, damit MPI das parallele Programmstarten kann.
int MPI_Init(int *argc , char *** argv)
Nach dem letzten MPI Aufruf wird MPI_Finalize ausgefuhrt, umalles Prozesse ordentlich zu beenden.
int MPI_Finalize(void)
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 13 /27
Kommunikator
MPI erlaubt es Kommunikation auf einem Subset der gestartenProzesse durchzufuhren, indem virtuelle Netzwerke, sogenannteKommunikatoren, angelegt werden.
I MPI Comm beschreibt einen Kommunikator, eine Menge von Prozessen{0, . . . , P − 1}.
I Des vordefinierte Netzwerk MPI COMM WORLD enthalt alle gestartenProzesse.
I Virtuelle Topologien: Ein Kommunikator kann zusatzlich eine spezielleStruktur erhalten, z.B. ein mehrdimensionales Feld, oder ein allgemeinerGraph.
I Kontext: Jeder Kommunikator definiert seinen eigenenKommunikationskontext.
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 14 /27
Rank und Size
Die Anzahl der Prozesse in einem Kommunikator wird mit MPI_Comm_sizebestimmt:
int MPI_Comm_size(MPI_Comm comm , int *size)
Innerhalb eines Kommunikators hat jeder Prozess eine eindeutige Nummer,diese wird mit MPI_Comm_rank bestimmt:
int MPI_Comm_rank(MPI_Comm comm , int *rank)
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 15 /27
Beispiel (I)
1 #include <stdio.h>
#include <string.h>
3 #include <mpi.h> // provides MPI macros and functions
5 int main (int argc , char *argv [])
{
7 int my_rank;
int P;
9 int dest;
int source;
11 int tag =50;
char hostname [256];
13 MPI_Status status;
15 MPI_Init (&argc ,&argv); // begin of every MPI program
MPI_Comm_size(MPI_COMM_WORLD ,&P); // number of processes
17 MPI_Comm_rank(MPI_COMM_WORLD ,& my_rank ); // my process number
gethostname(hostname ,255);
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 16 /27
Beispiel (II)
20 // number of current process always between 0 and P-1
if (my_rank !=0) {
22 dest = 0;
MPI_Send(hostname ,strlen(hostname )+1,MPI_CHAR , // Send data
24 dest ,tag ,MPI_COMM_WORLD ); // (blocking)
}
26 else {
for (source =1; source <P; source ++)
28 {
MPI_Recv(hostname ,256, MPI_CHAR ,source ,tag , // Receive data
30 MPI_COMM_WORLD ,& status ); // (blocking)
std::cout << "Reveived a message from process " << source
32 << " on machine " << hostname << std::endl;
}
34 }
36 MPI_Finalize (); // end of every MPI program
return 0;
38 },,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 17 /27
Ausgabe des Beispielprogramms (mit P=8)
> mpirun -machinefile machines -np 8 ./mpi-name
Reveived a message from process 1 on machine SCHAF03
Reveived a message from process 2 on machine SCHAF05
Reveived a message from process 3 on machine SCHAF07
Reveived a message from process 4 on machine SCHAF11
Reveived a message from process 5 on machine SCHAF13
Reveived a message from process 6 on machine SCHAF14
Reveived a message from process 7 on machine SCHAF15
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 18 /27
Blockierende KommunikationDie Entsprechung zu send und recv bieten
int MPI_Send(void *message , int count , MPI_Datatype dt ,
2 int dest , int tag , MPI_Comm comm);
int MPI_Recv(void *message , int count , MPI_Datatype dt ,
4 int src , int tag , MPI_Comm comm ,
MPI_Status *status );
Die ersten drei Parameter message, count und dt beschreiben die eigentlichenDaten. message ist ein Zeiger auf ein Feld mit count Elementen des Typs dt. DieAngabe des Datentyps erlaubt die automatische Umwandlung durch MPI. DieParameter dest, tag und comm beschreiben das Ziel bzw. die Quelle derNachricht.
MPI bietet verschiedene Varianten von MPI Send (MPI BSend, MPI SSend,MPI RSend), die wir aber jetzt nicht weiter diskutieren wollen.MPI ANY SOURCE und MPI ANY TAG konnen verwendet werden, um belibigeNachrichten zu empfangen. Damit enthalt MPI Recv die Funktionalitat vonrecv any.
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 18 /27
Blockierende KommunikationDie Entsprechung zu send und recv bieten
1 int MPI_Send(void *message , int count , MPI_Datatype dt ,
int dest , int tag , MPI_Comm comm);
3 int MPI_Recv(void *message , int count , MPI_Datatype dt ,
int src , int tag , MPI_Comm comm ,
5 MPI_Status *status );
Die ersten drei Parameter message, count und dt beschreiben die eigentlichenDaten. message ist ein Zeiger auf ein Feld mit count Elementen des Typs dt. DieAngabe des Datentyps erlaubt die automatische Umwandlung durch MPI. DieParameter dest, tag und comm beschreiben das Ziel bzw. die Quelle derNachricht.MPI bietet verschiedene Varianten von MPI Send (MPI BSend, MPI SSend,MPI RSend), die wir aber jetzt nicht weiter diskutieren wollen.
MPI ANY SOURCE und MPI ANY TAG konnen verwendet werden, um belibigeNachrichten zu empfangen. Damit enthalt MPI Recv die Funktionalitat vonrecv any.
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 18 /27
Blockierende KommunikationDie Entsprechung zu send und recv bieten
1 int MPI_Send(void *message , int count , MPI_Datatype dt ,
int dest , int tag , MPI_Comm comm);
3 int MPI_Recv(void *message , int count , MPI_Datatype dt ,
int src , int tag , MPI_Comm comm ,
5 MPI_Status *status );
Die ersten drei Parameter message, count und dt beschreiben die eigentlichenDaten. message ist ein Zeiger auf ein Feld mit count Elementen des Typs dt. DieAngabe des Datentyps erlaubt die automatische Umwandlung durch MPI. DieParameter dest, tag und comm beschreiben das Ziel bzw. die Quelle derNachricht.MPI bietet verschiedene Varianten von MPI Send (MPI BSend, MPI SSend,MPI RSend), die wir aber jetzt nicht weiter diskutieren wollen.MPI ANY SOURCE und MPI ANY TAG konnen verwendet werden, um belibigeNachrichten zu empfangen. Damit enthalt MPI Recv die Funktionalitat vonrecv any.
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 19 /27
Datenumwandlung
MPI erlaubt die Verwendung in heterogenen Netzen. Hierbei ist esnotig manche Daten an die Darstellung auf der fremdenArchitektur anzupassen.
MPI definiert die architektur-unabhangigen Datentypen:
MPI CHAR, MPI UNSIGNED CHAR, MPI BYTEMPI SHORT, MPI INT, MPI LONG, MPI LONG LONG INT,MPI UNSIGNED, MPI UNSIGNED SHORT, MPI UNSIGNED LONG,MPI FLOAT, MPI DOUBLE and MPI LONG DOUBLE.
Der MPI Datentyp MPI BYTE wird nie konvertiert.
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 20 /27
Status
1 typedef struct {
int count;
3 int MPI_SOURCE;
int MPI_TAG;
5 int MPI_ERROR;
} MPI_Status;
MPI_Status ist ein zusammengesetzter Datentyp, derInformationen uber die Anzahl der empfangenen Objekte, denQuellprozess, das Tag und den Fehlerstatus enhalt.
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 21 /27
Guard Funktion
Die Guard Funktion rprobe liefert
int MPI_Iprobe(int source , int tag , MPI_Comm comm ,
2 int *flag , MPI_Status *status );
Es ist eine nicht-blockierende Funktion, die uberpruft, ob eineNachricht vorliegt. flag erhalt den Wert true (6= 0) wenn eineNachricht mit passendem source und tag empfangen werdenkann. Auch hier konnen MPI ANY SOURCE und MPI ANY TAG
verwendet werden.
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 22 /27
Non-blocking Communication
Die Funktionen asend und arecv bietet MPI als
int MPI_ISend(void *buf , int count , MPI_Datatype dt ,
2 int dest , int tag , MPI_Comm comm ,
MPI_Request *req);
4 int MPI_IRecv(void *buf , int count , MPI_Datatype dt ,
int src , int tag , MPI_Comm comm ,
6 MPI_Request *req);
MPI Request speichert den Status einer Kommunikation, wieunsere msgid.
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 23 /27
MPI Request-Objekte
Der Status einer Nachricht kann mit Hilfe derMPI Request-Objekte und folgender Funktion gepruft werden:
int MPI_Test(MPI_Request *req , int *flag ,
2 MPI_Status *status );
flag wird auf true (6= 0) gesetzt, wenn die Kommunikation, diereq beschreibt abgeschlossen ist. In diesem Fall enthalt statusweitere Informationen.
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 24 /27
Globale Kommunikation
MPI bietet ebenfalls Funktionen zur globalen Kommunikation,welche alle Prozesse eines Kommunikators einschließen.
int MPI_Barrier(MPI_Comm comm);
implementiert eine Barriere; alle Prozesse werden blockiert, bisder letzte Prozess die Funktion ausgefuhrt hat.
1 int MPI_Bcast(void *buf , int count , MPI_Datatype dt ,
int root , MPI_Comm comm);
verteilt eine Nachricht an alle Prozesse eine Kommunikators(Einer-an-Alle Kommunikation).
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 25 /27
Einsammeln von Daten
MPI hat eine Reihe verschiedener Funktionen um Daten vonverschiedenen Prozessen einzusammeln. Z.B:
int MPI_Reduce(void *sbuf , void *rbuf , int count ,
2 MPI_Datatype dt , MPI_Op op , int root ,
MPI_Comm comm);
kombiniert die Daten im Sende-Puffer sbuf aller Prozesse durchdie assoziative Operation op (z.B. MPI SUM, MPI MAX oderMPI MIN). Das Ergebnis erhalt der Prozesse root in seinenEmpfang-Puffer rbuf.
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 26 /27
Zeitmessung
MPI bietet direkt Funktionen zur Zeitmessung:
1 double MPI_Wtime ();
Der Ruckgabewert sind Sekunden seit einem ,,beliebigen”Zeitpunkt in der Vergangenheit. Die Zeit fur eine spezielleOperation laßt sich also mit
1 double start = MPI_Wtime ();
expensive_funktion ();
3 std::cout << "elapsed time = "
<< MPI_Wtime () - start << std::endl;
bestimmen.
,,
Christian Engwer
wis
sen
lebe
nW
WU
Mun
ster
WestfalischeWilhelms-UniversitatMunster Exkurs: Paralleles Rechnen 27 /27
Weitere Informationen
MPI: Dokumentation der verschiedenen Message-PassingInterface Standardshttp://www.mpi-forum.org/docs/
MPICH-A Portable Implementation of MPIhttp://www-unix.mcs.anl.gov/mpi/mpich
Open MPI: Open Source High Performance Computinghttp://www.open-mpi.org/
Liste von MPI Tutorialshttp://www-unix.mcs.anl.gov/mpi/tutorial/
,,
Christian Engwer