- Werbung -

Dies ist der letzte Teil des Artikels über parallele und verteilte Berechnungen. Teil 1 bietet einen Überblick über das Thema. In Teil 2 wurde ein Beispiel für den Einsatz von OpenMP gebracht. Nun geht es um MPI und CORBA.

Details zu MPI

Nach erfolgreicher Installation von MPICH2 (ca. 9 MB) existiert ein Windows-Dienst "MPICH2 Process Manager". Wenn der Suchpfad, z.B. "D:\LIBS\mpich2\bin" hinzugefügt wurde, führen wir "als Administrator" einmal "smpd.exe –install" aus. Jetzt starten wir ein mitgeliefertes Demo-Programm (Quelle in Bild 5 & 6) z.B. in 7 Instanzen auf "einem" Rechner.


Bild 1: Programm mittels MPI in 7 Instanzen auf einem Rechner

In der Firewall muss dazu der Port 8676 freigeschaltet werden. Wenn sich also die Windows-Firewall dabei meldet, bestätigen wir die vorgeschlagene Öffnung. Beim ersten Start nach der Installation verlangt das MPI-Programm smpd.exe nach einem Passwort. Hierbei ist entweder das Default "behappy" oder "" (nur RETURN-Taste) einzugeben, je nachdem welche Version man installiert hat. Näheres ist in der Doku nachzulesen. Dann wird beim ersten Aufruf (bei weiteren nicht mehr) der aktuelle Rechner und Benutzer vorgeschlagen. Diese bestätigen wir einfach und geben unser bekanntes Passwort ein. Dann wird endlich das Programm (hier cPi.exe Bilder 5 & 6) mehrfach gestartet und führt seine Berechnungen mit Kommunikation zwischen den einzelnen Prozess-Instanzen durch.

Durch "smpd –version" ermitteln wir die installierte Version.

MPICH2 Install-Datei Version Default-Passwort
mpich2-1.0.8-win-ia32.msi 2009-03-09 1.0.8 "behappy"
mpich211win32.msi 2009-08-05 1.1 ""

 

Unter Windows XP können wir dies in der Registry mit RegEdit.exe nachprüfen unter:

  • HKEY_LOCAL_MACHINE\SOFTWARE\MPICH\SMPD

Unter Windows 7-64 konnte ich einen entsprechenden Eintrag nicht finden.

Jetzt wollen wir das Programm auf 2 Rechnern parallel laufen lassen. Da ich auf dem Hauptrechner Windows XP und auf dem Klapprechner Windows 7 mit unterschiedlichen Versionen von smpd.exe installiert habe, kommt bei Aufruf für "2 Rechner" leider eine Fehlermeldung. Deshalb testen wir gegen einen zweiten XP-Rechner (Legolas). Auf dem aufrufenden Rechner muss man als Administrator angemeldet sein, sonst bekommt man eine Fehlermeldung, dass ein Prozess auf dem Zielrechner nicht kreiert werden kann, also:


Bild 2: Programm mittels MPI je 1 Instanz auf 2 Rechnern

In der Windows-Firewall lässt sich der Port:8676 nicht direkt eingeben, deshalb geben wir auf beiden Rechnern das Programm "cpi" (Bild 3) und "2 MPI-Starter" (Bild 4) frei:


Bild 3: Programm cpi.exe freigegeben


Bild 4: Beide MPICH2-Programme freigegeben


Bild 5: MPI-Programm Teil 1

Die meisten von uns dürften keine 100 PCs zu Hause herumstehen haben. Der Programmlauf mit mehreren Instanzen auf einem Rechner oder Start auf 2 Rechnern funktioniert zwar, ist aber ziemlich reizlos, da der Kommunikationsaufwand gegen die Rechenzeit eines "Knotens" nicht mehr vernachlässigbar ist. Zur Ausarbeitung eines grösseren wissenschaftlichen Projekts zunächst auf bescheidener Hardware reicht dieses jedoch aus. Näheres ist im Buch [L1] nachzulesen.


Bild 6: MPI-Programm Teil 2 (durch Anklicken vergrößerbar)

Anmerkung: Bei der WDR-Computernacht 1998 im Nixdorf-Museum Paderborn wurden 512 PCs zu einem Linux-Cluster zusammengeschaltet. Die Feuerwehr musste dabei die Wärmeabfuhr organisieren!! Nach meiner Schätzung war für diese Rechner eine Anschlussleistung > 1 MW nötig.

Details zu CORBA

Für die Compilierung von CORBA in der Version für Visual Studio 2003 und dem Lauffähigmachen von 3 Demo-Programmen habe ich 2009 ca. 6 Wochen benötigt. Das Softwarepaket in Debug- und Release-Version belegt dann 2.5 GB auf der Platte und nochmals 350 MB für die Doku.

Die Struktur der Nachrichten muss dabei in einer C-ähnlichen Sprache (Bild 7) definiert werden und mit einem IDL-Compiler übersetzt werden (IDL = Interface Definition Language).


Bild 7: Beispiel für GMT-Zeit (heisst heute UTC = Universal Time Coordinated) vom Server

Die Versuche dafür das Client- und Server-Programm mittels der integrierten Entwicklungsumgebung von Visual Studio 2003 (VC++ 7.1) als Projekte übersetzt zu bekommen, waren nicht von Erfolg gekrönt. Selbst wenn man die mehr als 100 Libraries von ACE-CORBA komplett dem Linker vor die Füße wirft, war die Übersetzung nicht erfolgreich.

Eine Lösung des Problems besteht darin, die MS-Projektfiles durch das CORBA-Werkzeug "MPC" generieren zu lassen und die erzeugten Projektdateien noch ein wenig benutzerspezifisch anzupassen. Für das obige Beispiel galt:

Von MPC generierte Projektfiles
 
Client (reicht für
Linker nicht!)
ACEd.lib TAOd.lib
Link mit ACEd.lib TAOd.lib TAO_AnyTypeCoded.lib TAO_PortableServerd.lib
Server ACEd.lib TAOd.lib TAO_AnyTypeCoded.lib TAO_PortableServerd.lib

Die mitgelieferte Doku war dazu "wenig hilfreich"!

Das Client-Programm sieht dann etwa so aus


Bild 8: CORBA Client-Programm

Da die meisten Leser sich wohl wenig dafür interessieren, soll hier nicht weiter darauf eingegangen werden. Eine intensive Einarbeitung mittels der Bücher [L2] und [L3] für die professionelle Benutzung dürfte wohl einige Monate dauern.

Referenz Thema Buch
L1 MPI W.Gropp/E.Lusk/A.Skjellum, MPI- Eine Einführung, Oldenbourg-Verlag München
L2 CORBA Michi Henning / Steve Vinoski, Advanced CORBA Programming with C++, Verlag Addison-Wesley Boston etc.
L3 CORBA St.Huston / J. Johnson, U. Syyid, The ACE Programmer's Guide, Verlag Addison-Wesley Boston etc.