MPI (Message Passing)



  • Hey,

    Wenn ich MPI richtig verstanden habe (habs mir vor Zeiten mal angelesen), dann bedarf es noch ein wenig mehr als nur MPI, denn MPI ist nur eine C/C++ Ergänzung, zusätzlich zu MPI wird (glaub ich) auch noch der GCC installiert oder benötigt, zusammen ergibt es ein Paket in dem das zuverteilende Programm als Sourcecode vom Master kompiliert wird und anschließend an die Slaves automatisch verteilt wird... wenn Du es also unter DOS laufen lassen möchtest, brauchst Du:

    1. TCP/IP Client unter DOS
    2. GCC Compiler unter DOS (hab ich bisher noch nicht gesehen)
    3. MPI Sourcecode zwecks Eigenkompilation, obs dann mit Deinem TCP/IP Client funktioniert, keine Ahnung

    Dokumentationen findest Du für MPI wesentlich mehr unter Linux/Unix als unter anderen Plattformen, insofern kann man sich bestimmt besser da durcharbeiten als "irgendwas von irgendeinem Anbieter" oder "Eigenbau"

    Winn



  • Dr. von Rosenstein schrieb:

    Kuck ich mir mal an, danke!

    Aber so wie ich das bisher verstanden habe kann ich mir nicht vorstellen warum es MPI nicht für MS-OSes geben sollte. Muß ja nichts offizielles sein. Irgendwas von irgendeinem Anbieter würde mir ja schon reichen...

    Hi,

    Cluster-Software findest Du fasst immer nur für Unixderivate, weil die Anwendungen meist jenseits der MS Absatz Strategie liegen.

    Wenn Du allerdings Windows-Server clustern willst und dir win2k/XP Server nicht mehr langt gehe über ACE:

    http://www.google.de/search?q=MPI+ACE+cluster&ie=UTF-8&oe=UTF-8&hl=de&meta=
    http://www.cs.wustl.edu/~schmidt/ACE.html

    cu

    P84



  • Hab mal n bissl gesucht und net wirklich was gefunden. Muß ich eben bei Linux bleiben.

    Gibt es hier jemand der sich mit MPI auskennt? Wie gesagt, machen wir grad an der Uni und ich kann ich mir vorstellen daß ich dann und wann mal ne Frage hab. Oder kennt jemand vielleicht n anderes Forum das sich mit MPI beschäftig?

    Gleich mal die erste Frage:
    Kann ich MPI irgendwie vorschreiben welche Prozesse auf welchen Prozessoren laufen sollen? Bei dem was wir gerade machen haben wir 257 Prozesse. Der erste davon hat aber sehr viel mehr zu tun als die anderen. Jetzt will ich erreichen, daß dieser Prozess ALLEIN auf einem Prozessor läuft und die anderen 256 auf die anderen Prozessoren verteilt werden...



  • Dr. von Rosenstein schrieb:

    Gleich mal die erste Frage:
    Kann ich MPI irgendwie vorschreiben welche Prozesse auf welchen Prozessoren laufen sollen? Bei dem was wir gerade machen haben wir 257 Prozesse. Der erste davon hat aber sehr viel mehr zu tun als die anderen. Jetzt will ich erreichen, daß dieser Prozess ALLEIN auf einem Prozessor läuft und die anderen 256 auf die anderen Prozessoren verteilt werden...

    Das kann ja so sinnvoll nicht sein, nach der 80/20 Regel... sind 80% CPU Zeit auf 20% des Quellsources bezogen, d.h. Du solltest zusehen, daß Du die Prozesse so verteilst, daß sie synchron und ohne viel warten mit den anderen Prozessen ablaufen... d.h. ich würde den Prozess der am meisten Zeit verschlingt, versuchen so zu stückeln, daß ich ihn noch auf mehrere Prozessoren verteilen kann, daß erreichst Du mit der Syntax von MPI... soviel zur Theorie... richtig damit gearbeitet hab ich derzeit auch noch nicht, aber was nicht ist, kann noch werden...



  • Prinzipiell hast du natürlich Recht, aber ich steh noch ganz am Anfang. Ich hab auch schon fast 2 Jahre kein C mehr programmiert. Ich muß mich erstmal wieder einarbeiten. Der Prozess der die viele Arbeit hat muß in einer Datei arbeiten. Und da hab ich bisher noch keine Idee wie ich das sinnvoll aufteilen kann. Aber mal davon abgesehen. Wenn man mal annimmt daß nicht alle Kisten gleich schnell sind, wegen verschiedener Hardware, dann will ich ja auch, daß auf den langsameren Kisten weniger Prozesse laufen. Dann hab ich also das gleiche Problem...



  • Ich geh mal davon aus, daß der Prozess der auf der Datei arbeitet so groß ist, daß er nicht nur im Speicher laufen kann... ich hab demnächst ein ähnliches Problem, indem ich eine große Datei bearbeiten muß und bin zu dem Schluß gekommen, daß ich möglichst viel in den Speicher schiebe werde... denn der Flaschenhals bei Deinem/meinem Problem ist nunmal die Festplatte... wenn allerdings MPI die Verteilung des Speichers auf die Rechner übernimmt, dann "könntest" Du ja theoretisch so viel Datei aufnehmen, wie Dein benutzter Rechnercluster zusammen hat, was sich in der Performance positiv auswirken würde... wenn Du soweit bist, würd mich das auch interessieren... vielleicht löse ich mein Problem dann auch mit MPI ?! Halte mich mal auf dem Laufenden...

    P.S.: Wenn ich mich nicht irre, dann kannst Du mit MPI gezielt Prozesse verteilen, d.h. nicht so rechenintensive Prozesse können auf "langsamen" Rechnern verteilt werden... an meiner Hochschule hat das HRZ die Systeme so eingerichtet, daß sie mit MPI und noch irgendsowas laufen, die könnten Dir theoretisch zumindest auch einen Rat auf Deine Fragen geben, die Mathematiker bzw. Chemiker sind meist auch auf MPI eingeschossen und wissen Bescheid.



  • Bin jetzt net ganz sicher ob ich dich ganz verstanden hab. Bei mir ist es so, daß die Datei zentral auf einem Server liegt. Also alle Rechner auf denen mein Programm läuft könnten auf die Datei gleich schnell zugreifen. Theoretisch! Das größte Problem was ich hab ist meine Unkenntnis.
    Das in deinem P.S. ist genau das was ich suche. Haben die Leute ne Homepage wo ich ne E-Mail Adresse her kriegen kann?



  • Dr. von Rosenstein schrieb:

    Das in deinem P.S. ist genau das was ich suche. Haben die Leute ne Homepage wo ich ne E-Mail Adresse her kriegen kann?

    Du bist doch auch an einer Hochschule, oder nicht ? Das HRZ ist halt das Hochschulrechenzentrum Deiner Hochschule, schau einfach mal, ob ihr überhaupt Parallelrechner etc. habt bzw. ob MPI bei Euch überhaupt in Benutzung ist... die Ausstattung meiner Uni -> http://www.uni-duisburg.de/HRZ/services/zusatz/compute_service/ nicht gerade viel, aber immerhin... Ansprechpartner ist immer ein Herr Scheunemann, vielleicht hilft er Dir, aber versprechen kann ich's Dir nicht...

    Gruß Winn



  • Aso! Bei uns heißt das aber URZ. Für Uni halt.
    Das mit der Datei hab ich nach vielem rumprobieren hinbekommen. Jetzt navigiere ich ein bischen in der Datei herum und kann das ganze so recht gut parallelisieren.
    Und für das festlegen welcher Rechner wieviele Prozesse bekommt hab ich auch ne Lösung: Man kann in der Liste, in der angegeben ist welche Rechner zur Verfügung stehen angeben, wieviele CPUs diese haben. Wenn man jetzt sagt, daß eine Kiste 2 CPUs hat, dann bekommt diese auch doppelt so viele Prozesse zugeteilt. Und diese Angabe muß nicht stimmen. Man kann also einem Rechner der doppelt so schnell wie die anderen ist sagen, daß er 2 CPUs hat und dann doppelt so viel bekommt. Ist zwar nicht ganz das was ich wollte, aber so gehts auch...



  • Ich hab was gefunden:

    http://www-unix.mcs.anl.gov/mpi/mpich/

    Scheint auch zu funktionieren, ich bin nur zu blöd für. Hab da nämlich ein Problem:
    Ich hab was in Visual C++ geschrieben und den Pfad für die include-Dateien von dem MPICH angegeben. Kompilieren tut das Teil, aber wenn ich versuche ne *.exe zu erstellen dann kommt folgendes:

    --------------------Konfiguration: test - Win32 Debug--------------------
    Linker-Vorgang läuft...
    test.obj : error LNK2001: Nichtaufgeloestes externes Symbol _MPI_Finalize
    test.obj : error LNK2001: Nichtaufgeloestes externes Symbol _MPI_Wtime
    test.obj : error LNK2001: Nichtaufgeloestes externes Symbol _MPI_Recv
    test.obj : error LNK2001: Nichtaufgeloestes externes Symbol _MPI_Ssend
    test.obj : error LNK2001: Nichtaufgeloestes externes Symbol _MPI_Comm_rank
    test.obj : error LNK2001: Nichtaufgeloestes externes Symbol _MPI_Init
    Debug/test.exe : fatal error LNK1120: 6 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    test.exe - 7 Fehler, 0 Warnung(en)

    Ich kann mit den Meldungen nichts anfagen. Wenn ich versuche das Ganze mit dem Borland Compiler zu erstellen kommt was ähnliches.

    Hat jemand ne Idee?



  • du linkst die Library nicht richtig.



  • OK, also ich denk du meinst die *.lib Dateien. In dem Ordner wo sich MPICH hin installiert hat gibt es 2 Unterordner. Einer heißt SDK und der andere SDK.gcc. In beiden gibt es Ordner die Lib heißen. Aber nur im SDK\Lib sind auch *.lib's drinnen. Wenn ich jetzt in Visual C++ hingehe und "Projekt->Dem Projekt hinzufügen->Dateien" mache und die die 4 Dateien auswähle (diese heißen mpe.lib, mped.lib, mpich.lib und mpichd.lib) und das Ganze dann erstellen lasse kommt:

    --------------------Konfiguration: test - Win32 Debug--------------------
    Linker-Vorgang läuft...
    LIBCMT.lib(dosmap.obj) : error LNK2005: __dosmaperr bereits in LIBCD.lib(dosmap.obj) definiert
    LINK : warning LNK4098: Standardbibliothek "LIBCMT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULT:Bibliothek verwenden
    Debug/test.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden
    Fehler beim Ausführen von link.exe.

    test.exe - 2 Fehler, 1 Warnung(en)

    Und wie gesagt, eine LIBCMT.lib ist überhauptnet in dem Ordner. Jetzt hab ich mal ausprobiert was passiert wenn ich nur die mpich.lib dazu tue. Hab die genommen weil die genauso heißt wie das was ich installiert hab. Jetzt kompiliert er ohne Fehler. Ich hab aber keine Dokumentation gefunden wofür die 4 *.lib's da sind. Kann mir einer sagen ob es reicht wenn ich die eine dazu tue? Oder eine andere?



  • Libraries bindest du in Visual C++ über
    Project -> Settings -> Link Tab -> Object/Library modules ein.

    Neben MPICH gibt es noch eine zweite freie MPI-Distribution: http://www.lam-mpi.org/. Mit LAM-MPI habe ich meine Aplikationen für ein Linux-Cluster parallelisiert.

    tbeu



  • Genau so hab ich die Libraries ja eingebunden. Und dann kam der Fehler. Wenn ich aber auf diesem Weg nur die eine Library einbinde, dann funzt es.

    Danke für den Link, aber ich brauch MPI für Windows. Auf der Seite hab ich dazu nix gefunden. MPICH ist für Windows. Aber wenn du noch was anderes kennst, immer her damit.

    Für nen Tipp für ein deutsches Buch oder Tutorial wäre ich auch dankbar...


Anmelden zum Antworten