MPI auf einem Rechner dualcore
Was passiert, wenn ich lief ein MPI-Programm, das 3 Knoten (d.h. mpiexec -np 3 ./Programm) auf einer einzelnen Maschine hat 2 cpu?
- Darf ich vorschlagen, das entfernen von "Gleichzeitigkeit" als tag? MPI gibt Sie, parallele Ausführung, aber keine Parallelität in dem Sinne, dass Sie können schreiben, ein web-server, sagen wir mit ihm.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist abhängig von Ihrer MPI-Implementierung, natürlich. Die meisten wahrscheinlich, es schaffen wird, drei Prozesse, und die Nutzung von shared memory zum Austausch der Nachrichten. Dies wird gut funktionieren: das Betriebssystem wird der Versand der beiden CPUs über die drei Prozesse, und immer führen Sie eine der ready-Prozesse. Wenn ein Prozess wartet, bis eine Nachricht empfangen wird, wird es blockiert, und das Betriebssystem wird zu planen eine der beiden anderen Prozesse laufen, von denen wird die eine, die die Nachricht sendet.
Martin hat die richtige Antwort gegeben und ich habe plus-1ed ihn, aber ich möchte nur hinzufügen, ein paar Feinheiten, die sind ein wenig zu lang und passt nicht in das Kommentarfeld ein.
Es ist nichts falsch mit, dass mehr Prozesse als Kerne, natürlich; Sie haben wahrscheinlich Dutzende, die auf Ihrem Computer auch, bevor Sie laufen alle MPI-Programm. Sie können versuchen, mit einer beliebigen Befehlszeile ausführbare Datei, die Sie haben, sitzen um so etwas wie
mpirun -np 24 hostname
odermpirun -np 17 ls
auf einer linux-box, und Sie erhalten 24 Kopien Ihrer hostname oder 17 (wahrscheinlich interleaved) directory listings und alles läuft wunderbar.In MPI, dies mit mehr Prozesse als Kerne ist in der Regel genannt werden 'überzeichnen'. Die Tatsache, dass es einen speziellen Namen deutet schon darauf hin, dass es ein besonderer Fall. Die Arten von Programmen, geschrieben mit MPI in der Regel am besten erfüllen, wenn jeder Prozess hat seinen eigenen Kern. Es gibt Situationen, in denen dies nicht der Fall sein, aber es ist (bei weitem) das übliche. Und aus diesem Grund, zum Beispiel, OpenMPI ist optimiert für den üblichen Fall-es macht einfach von der starken Annahme, dass jeder Prozess hat seinen eigenen Kern, und so ist sehr aggressiv in die CPU zu nutzen, um Abfragen, um zu sehen, ob eine Nachricht gekommen, in der doch (da es zahlen ist es nicht etwas anderes zu tun entscheidend). Das ist nicht ein problem, und kann leicht ausgeschaltet werden, wenn OpenMPI weiß, es wird überzeichnet ( http://www.open-mpi.org/faq/?category=running#oversubscribing ). Es ist eine design-Entscheidung, und eine, die verbessert die Leistung von der überwiegenden Mehrheit der Fälle.
Aus historischen Gründen, ich bin mehr vertraut mit OpenMPI als MPICH2, aber mein Verständnis ist, dass MPICH2s Standardwerte sind nachsichtiger der überzeichnet Fall-aber ich denke auch es auch es ist möglich auf mehr aggressiv busywaiting.
Sowieso, das ist ein langer Weg zu sagen, dass ja, was du machst, ist völlig in Ordnung, und wenn Sie sehen seltsame Probleme beim wechseln MPIs oder sogar Versionen von MPIs, tun, eine schnelle Suche, um zu sehen, ob es irgendwelche Parameter, die optimiert werden müssen für diesen Fall.