MPI (Message Passing)



  • 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