Revision history for MpiMpdRing


Revision [24758]

Last edited on 2017-08-01 21:22:39 by ToBo
Additions:
~-Am besten mittels [[LinuxNfs NFS]] einen User-Account auf allen Rechnern einrichten, so sind alle benutzerspezifischen Einstellungen und die Parallelprogramme auf allen Rechner gleich vorhanden.
Deletions:
~-Am besten mittels [[NfsServer NFS]] einen User-Account auf allen Rechnern einrichten, so sind alle benutzerspezifischen Einstellungen und die Parallelprogramme auf allen Rechner gleich vorhanden.


Revision [7560]

Edited on 2009-01-21 17:15:58 by ToBo
Additions:
Hier am Rande: Der SMPD ist ein alternativer Prozess Manager für Unix und Windows. Solange die Binärformate (int, long, double etc.) auf den Plattformen gleich sind, so sollen Windows und Linux Rechner in einem Cluster genutzt werden können. Das habe es nicht probiert.
Deletions:
Hier am Rande: Der SMPD ist ein alternativer Prozess Manager für Unix und Windows. Solange die Binärformate (int, long, double etc.) auf den Plattformen gleich sind, so sollen Windows und Linux Rechner in einem Cluster genutzt werden. Wenn es sein muss - ich habe es nicht probiert.


Revision [7545]

Edited on 2009-01-20 02:57:44 by ToBo
Additions:
Die [[http://phase.hpcc.jp/mirrors/mpi/mpich2/downloads/mpich2-doc-user.pdf MPICH2-Benutzerhandbuch]] ist sehr hilfreich. A
Im Internet ist oft die Rede von einem MPD-Ring. Das [[http://phase.hpcc.jp/mirrors/mpi/mpich2/downloads/mpich2-doc-user.pdf MPICH2-Benutzerhandbuch]] erwähnt "MPD ring" nur einmal in dem Kontext. Die Rechner können jedoch beliebig (Vollvernetzung) miteinander kommunizieren.
Nächster Schritt: Unbedingt die /etc/hosts auf allen Rechnern anpassen oder mit einem Nameserver arbeiten. Viel Spass!
Deletions:
Die [[http://phase.hpcc.jp/mirrors/mpi/mpich2/downloads/mpich2-doc-user.pdf MPICH2-Benutzerdokumentation]] ist sehr hilfreich. A
Ein Ring ist eine Verkettung von mehreren mpd-Prozessen, die jeweils einem Prozessor zugeordnet sind. Die Prozessoren können auch auf verschiedenen Rechnern verteilt sein.
Unbedingt die /etc/hosts auf allen Rechnern anpassen oder mit BIND arbeiten


Revision [7544]

Edited on 2009-01-20 02:53:24 by ToBo
Additions:
Dabei wird IBM wegen seiner schwachen Leistung und schlechten Anbindung mit 10Base-T und Thalamus wegen seiner schlechten Verbindung über VPN und Internet meist weggelassen. Diese Rechner dienten nur zum Experimentieren, um ein Gefühl für MPI zu bekommen.
||IBM||486 mit 66 MHz||
Deletions:
Dabei wird IBM wegen seiner schwachen Leistung und schlechten Anbindung mit 10Base-T und Thalamus wegen seiner schlechten Verbindung über VPN und Dorf-Telekom-DSL.
||IBM|| 486 66 MHz||


Revision [7543]

Edited on 2009-01-20 02:51:05 by ToBo
Additions:
=====MPD einrichten=====
Wir gehen davon aus, dass [[MpiInstallation MPICH2 installiert]] ist.
Soll der MPD auf mehreren Prozessoren die auf einem Rechner mit gemeinsamen Speicher untergebracht sind (Dual Core, Quad Core etc.), dann ist die Sache hier am Ende angelangt. Herzlichen Glückwunsch beim starten der Programme mit mpiexec. Allerdings sollte dann bei der Entwicklung eher OpenMP in Erwägung gezogen werden, da der Code wesentlich übersichtlicher und das Erweitern von bestehenden Algorithmen einfacher ausfällt.
Ein ist Cluster ist ein Haufen Rechner, die zusammen als Einheit fungieren, um bestimmte Aufgaben zu erfüllen.
Die bloße Vernetzung von Rechnern ist allerdings noch kein Cluster. Erst wenn die Rechner ein Einheit zur Lösung von Aufgaben bilden, dann handelt es sich um ein Cluster. In unserem Fall soll Parallelrechner werden, auf dem Programme basierend auf der Bibliothek MPICH2 ausgeführt werden können.
Meine Beispiele werden alle in diesem Rechnerverbund ausgeführt:
Dabei wird IBM wegen seiner schwachen Leistung und schlechten Anbindung mit 10Base-T und Thalamus wegen seiner schlechten Verbindung über VPN und Dorf-Telekom-DSL.
Deletions:
=====MPD-Ring=====
Wir gehen davon aus, dass [[MPICH2 MpiInstallation installiert]] ist.


Revision [7542]

Edited on 2009-01-20 02:36:38 by ToBo
Additions:
==a==Process Management System==a==
Die [[http://phase.hpcc.jp/mirrors/mpi/mpich2/downloads/mpich2-doc-user.pdf MPICH2-Benutzerdokumentation]] ist sehr hilfreich. A
Wir gehen davon aus, dass [[MPICH2 MpiInstallation installiert]] ist.
===MPD===
Um die speziellen [[Mpi MPI-Programme]] mit mpiexec auf Parallelrechnern starten zu können, muss ein Prozess Management System eingerichtet werden. MPICH2 bietet mehrere Prozess Management Systeme. Der Standard ist MPD. Bei einem Rechner mit mehreren CPUs wird einfach ein Prozess Management System gestartet.
Dazu reicht schon ein Befehl.
%%mpd &%%
===MPD auf einem Cluster starten===
Bei Clustern aus mehreren Rechnern wird es schon wesentlich komplizierter.
Um [[MpiMpdRing MPD]] auf mehreren Rechnern einzurichten, sind die folgenden Punkte zu erledigen. Das hat mich einige Tage gekostet.
~-Die Datei /etc/hosts auf allen Rechner anpassen oder mit [[DnsServer DNS-Server]] arbeiten. Aufpassen mit //localhost//! Siehe dazu unten Fehlerbehandlung oder alternativ Nameserver einrichten. Wenn ein Nameserver vorhanden ist, dann ist schon viel gewonnen.
~-Einen extra Benutzer auf allen Maschinen für die Arbeit mit MPI einrichten. Bei der Arbeit mit MPI muss man davon ausgehen, dass sich ei Eindringling ohne weitere Vorkehrungen von jedem beliebigen System auf alle anderen Systeme Zugang verschaffen kann.
~-Am besten mittels [[NfsServer NFS]] einen User-Account auf allen Rechnern einrichten, so sind alle benutzerspezifischen Einstellungen und die Parallelprogramme auf allen Rechner gleich vorhanden.
~-Der Start der MPD auf allen Rechnern ist per Hand sehr mühsam. Wesentlich bequemer geht es mit mpdboot. Aber dann müssen Passwörter im Akkord eingegeben werden. Etwas bequemer geht alles, wenn die Passworteingaben beim Start von mpdboot wegfallen. Das kann mittels [[LinuxSshPublicKeyAuth Public-Key-Authentifizierung]] erreicht werden.
~-[[MpiMpdRing MPD-Ring]] mit bootmpd starten und mit mpdringtest und mpdtrace testen.
Auf diese Weise kann man MPI-Programme mit mpiexec auf einem beliebigen Rechner ausführen und sehr zufrieden mit dem Cluster arbeiten. In den [[Mpi Beispielen]] mehr dazu.
===SMPD===
Hier am Rande: Der SMPD ist ein alternativer Prozess Manager für Unix und Windows. Solange die Binärformate (int, long, double etc.) auf den Plattformen gleich sind, so sollen Windows und Linux Rechner in einem Cluster genutzt werden. Wenn es sein muss - ich habe es nicht probiert.
==a==Cluster==a==
==a==Cluster im LAN==a==
{{image url="images/MpdRing.png"}}
Deletions:
==a==Mit mehreren Rechnern im LAN==a==


Revision [7509]

Edited on 2009-01-18 22:39:00 by ToBo
Additions:
===Die Rechner===
mpdhosts2 ist eine Liste mit vier Rechnern (insgesamt fünf CPUs), die ich häufig für die Übungen genutzt habe.
Der 486er namens IBM ist nicht dabei, weil dieser Rechner wehen seiner langsamen 10Base-T-Verbindung und Leistungsfähigkeit eher gebremst hat.
%%(text;;mpdhosts2)
Skript runmpd verwende ich gerne zum Start des MPD-Rings. Dabei muss die Host-Liste von oben als Parameter angegeben werden. War der Start erfolgreich, dann macht das Skript noch einen Test mit mpdringtest.
runmpd mpdhosts2
%%(bash;;runmpd)
Wenn mpd nicht sauber beendet wurde und deshalb nicht starten will, dann diese zwei Befehle, notfalls auf allen Rechnern ausführen.
Genteleman, please start your engines!
Hier versuche ich einen Server in 80 km Entfernung zusätzlich über das Internet über VPN ([[LinuxOpenVpn OpenVPN]]) in den MPD-Ring einzubinden.
Deletions:
Die Rechner:
mpdhosts2 mit vier Rechnern
insgesamt 5 CPUs
IBM ist nicht dabei
mpd auf dem lokalen Rechner und den Hosts (in dem Fall nur HOST2) starten
mpdboot -d -n 2 -f ../mpd_hosts
Oder das Skript runmpd verwenden: runmpd mpdhosts2
runmpd
chmod 700 /home/mpi
chmod 770 /home/mpi
Wenn mpd nicht starten will, dann
Wie oben ywei Rechner im LAN, aber zusätzlich mit einem Rechner in 80 km Entfernung über das Internet über VPN ([[LinuxOpenVpn OpenVPN]]).


Revision [7481]

Edited on 2009-01-17 21:37:34 by ToBo
Additions:
==a==Mit mehreren Rechnern im LAN==a==
Die Rechner:
mpdhosts2 mit vier Rechnern
insgesamt 5 CPUs
IBM ist nicht dabei
Deletions:
==a==Mit zwei Rechnern im LAN==a==
mpdhosts2 mit vier Rechnern (insgesamt 5 CPUs)


Revision [7480]

Edited on 2009-01-17 21:36:25 by ToBo
Additions:
Unbedingt die /etc/hosts auf allen Rechnern anpassen oder mit BIND arbeiten
mpdhosts2 mit vier Rechnern (insgesamt 5 CPUs)
MpiDC:2
Thunderbird:1
amygdala:1
Orion:1
Oder das Skript runmpd verwenden: runmpd mpdhosts2
runmpd
#!/bin/bash
# Andreas Tobola
# Usage: mpdrun hostlist3
cd `dirname $0`
chmod 700 /home/mpi
NUM_OF_HOSTS=`wc -l $1 | awk '{print $1}'`
mpdboot -v -n $NUM_OF_HOSTS -f $1 && mpdringtest 10
chmod 770 /home/mpi
Wenn mpd nicht starten will, dann
||Orion||Pentium I, 133 MHz||
||Thunderbird||Athlon Thunderbird mit 1.4 GHz und später mit 1.5 GHz||
||MpdDC||Intel Dual Core 2 GHz||
~$ ./runmpd mpdhosts2
LAUNCHED mpd on MpiDC via amygdala
LAUNCHED mpd on Thunderbird via amygdala
LAUNCHED mpd on Orion via amygdala
RUNNING: mpd on MpiDC
RUNNING: mpd on Thunderbird
RUNNING: mpd on Orion
time for 10 loops = 0.0871088504791 seconds
**Geht nicht! Das muss ich noch genauer untersuchen!**
==a==MPD auf einem bestimmten Rechner testen==a==
=a=Einen einzelnen mpd zum Testen starten=a=
normal zum Testen
%%mpd%%
oder als Dämon
%%mpd -d%%
=a=mpd auf einem Rechner mit 4 CPUs einrichten=a=
%%(bash)mpd --daemon --ncpus=4%%
=a=Weitere Parameter für mpd=a=
echo gibt Informationen aus, wie z.B. die Portnummer
%%mpd --echo%%
--listenport=4991
Deletions:
mpd_hosts mit zwei Rechnern
Unbedingt die /etc/hosts anpassen (siehe Fehlerbehandlung unten)
HOST1:1
HOST2:1
$ mpdringtest 100
time for 100 loops = 1.73064303398 seconds
Starten von drei Prozessen auf HOST1 und einem Prozess auf HOST2
Insgesamt werden vier Prozesse ([[MpiBeispielRing Quellcode]]) gestartet.
mpiexec -n 3 -host HOST1 ~/code/mpi/04_ring/ring : -n 1 -host HOST2 ~/mpi/ring
Ausgabe
R1 is waiting for R0...
R2 is waiting for R1...
R3 is waiting for R2...
R0 sent data to R1.
R0 is waiting for R3...
R1 received from R0: Wir spielen mit MPI!
R1 sent data to R2.
R1 is waiting for R0...
R2 received from R1: Wir spielen mit MPI!
R2 sent data to R3.
...
R0 bis R2 wurden auf HOST1 ausgeführt und R3 auf HOST2
Die Nachricht 2Wir spielen mit MPI!" wurde von R0 initial an R1 gesendet,
dann von R1 an R2,
dann von R2 an R3,
dann von R3 an R0
usw.
==a==Mit drei Rechnern im LAN==a==
||Orion|| Pentium I, 133 MHz||
||KnoppixMpi||Intel Dual Core 2 GHz ||


Revision [7347]

Edited on 2009-01-08 04:50:11 by ToBo
Additions:
==a==Mit drei Rechnern im LAN==a==
||IBM|| 486 66 MHz||
||Amygdala|| Pentium III (Coppermine) 667 MHz||
||Orion|| Pentium I, 133 MHz||
||KnoppixMpi||Intel Dual Core 2 GHz ||


Revision [6988]

Edited on 2008-12-09 02:53:11 by ToBo

No Differences

Revision [6987]

Edited on 2008-12-09 02:52:48 by ToBo
Additions:
mpiexec -n 1 -host amygdala ~/code/mpi/04_ring/ring : -n 1 -host thalamus ~/mpi/ring : -n 1 -host IBM thalamus ~/mpi/ring
Fehlermeldung auf allen Rechnern
(mpiexec 392): no msg recvd from mpd when expecting ack of request
Deletions:
mpiexec -n 1 -host amygdala ~/code/mpi/04_ring/ring : -n 1 -host thalamus ~/mpi/ring : -n 1 -IBM thalamus ~/mpi/ring


Revision [6986]

Edited on 2008-12-09 02:49:13 by ToBo
Additions:
mpiexec -n 1 -host amygdala ~/code/mpi/04_ring/ring : -n 1 -host thalamus ~/mpi/ring : -n 1 -IBM thalamus ~/mpi/ring
no msg recvd from mpd when expecting ack of request


Revision [6985]

Edited on 2008-12-09 01:53:11 by ToBo
Additions:
==a==Mit zwei Rechnern im LAN==a==
==a==Mit drei Rechnern im Internet==a==
Wie oben ywei Rechner im LAN, aber zusätzlich mit einem Rechner in 80 km Entfernung über das Internet über VPN ([[LinuxOpenVpn OpenVPN]]).
mpdboot
running mpdallexit on amygdala
LAUNCHED mpd on amygdala via
RUNNING: mpd on amygdala
LAUNCHED mpd on thalamus via amygdala
LAUNCHED mpd on IBM via amygdala
RUNNING: mpd on thalamus
RUNNING: mpd on IBM
time for 50 loops = 9.1834859848 seconds


Revision [6979]

Edited on 2008-12-08 23:28:33 by ToBo
Additions:
$ mpdringtest 100
time for 100 loops = 1.73064303398 seconds


Revision [6974]

Edited on 2008-12-08 04:06:23 by ToBo
Additions:
Ein Ring ist eine Verkettung von mehreren mpd-Prozessen, die jeweils einem Prozessor zugeordnet sind. Die Prozessoren können auch auf verschiedenen Rechnern verteilt sein.
Deletions:
Ein Ring ist eine Verkettung von mehreren mpd-Prozessen, die jeweils einem Prozessor zugeordnet sind.


Revision [6973]

Edited on 2008-12-08 04:05:17 by ToBo
Additions:
Ein Ring ist eine Verkettung von mehreren mpd-Prozessen, die jeweils einem Prozessor zugeordnet sind.
Deletions:
Ein Ring ist eine Verkettung von mehreren mpd-Prozessen, die


Revision [6957]

Edited on 2008-12-08 02:12:36 by ToBo
Additions:
=====MPD-Ring=====
Ein Ring ist eine Verkettung von mehreren mpd-Prozessen, die
mpd_hosts mit zwei Rechnern
Unbedingt die /etc/hosts anpassen (siehe Fehlerbehandlung unten)
%%
HOST1:1
HOST2:1
%%
mpd auf dem lokalen Rechner und den Hosts (in dem Fall nur HOST2) starten
%%(bash)
mpdallexit
mpdcleanup
mpdboot -d -n 2 -f ../mpd_hosts
%%
Starten von drei Prozessen auf HOST1 und einem Prozess auf HOST2
Insgesamt werden vier Prozesse ([[MpiBeispielRing Quellcode]]) gestartet.
%%(bash)
mpiexec -n 3 -host HOST1 ~/code/mpi/04_ring/ring : -n 1 -host HOST2 ~/mpi/ring
%%
Ausgabe
%%
R1 is waiting for R0...
R2 is waiting for R1...
R3 is waiting for R2...
R0 sent data to R1.
R0 is waiting for R3...
R1 received from R0: Wir spielen mit MPI!
R1 sent data to R2.
R1 is waiting for R0...
R2 received from R1: Wir spielen mit MPI!
R2 sent data to R3.
...
%%
R0 bis R2 wurden auf HOST1 ausgeführt und R3 auf HOST2
Die Nachricht 2Wir spielen mit MPI!" wurde von R0 initial an R1 gesendet,
dann von R1 an R2,
dann von R2 an R3,
dann von R3 an R0
usw.
Deletions:
=====Titel=====


Revision [6955]

The oldest known version of this page was created on 2008-12-08 02:11:50 by ToBo
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki