2016-05-29 12 views
0

Ich möchte zwei Arrays senden: double A und int B mit Broadcast in MPI (ich benutze C++). Normalerweise blockiert die communicator.Bcast Blöcke für Leser, aber nicht für den Schreiber. Also, wenn ich es tat:zwei MPI-Broadcasts nacheinander

Es könnte passieren, dass ein Prozess zuerst die zweite Nachricht abrufen würde und Dinge würden durcheinander bringen.

Ich frage mich, was ist die gute, saubere Lösung für dieses Problem? Soll ich abgeleitete Datentypen/MPI_Pack verwenden? Es scheint hässlich. Kann ich irgendwie die Verwendung von TAGs im Broadcast erzwingen?

Antwort

4

MPI garantiert, dass Sammelanrufe auf einem Communicator in der Reihenfolge ihrer Ausgabe bearbeitet werden. Nein, die Leser werden die zweite Nachricht nicht zuerst abrufen - das Beispiel ist sicher.

FYI, die MPI C++ - Schnittstelle ist veraltet - es ist besser, die C-API direkt für neuen Code zu verwenden.

+0

Es ist erwähnenswert, dass die Garantie nur dort ist, solange die Reihenfolge der Sammelrufe in allen Rängen gleich ist. Ansonsten ist das Verhalten nicht definiert. –