Es ist etwas seltsam, dass Sie dies im Zusammenhang mit der Reihenfolge der Nachrichten erwähnen. Zitiere dich:
Soweit ich weiß, stimmt die Reihenfolge, in der nicht blockierende Punkt-zu-Punkt-MPI-Nachrichten (Isend und Irecv) empfangen werden, mit der Reihenfolge überein, in der sie gesendet werden.
An dieser Stelle sei darauf hingewiesen, dass MPI nur garantiert, dass übereinstimmende Nachrichten zwischen Prozessen in der Reihenfolge empfangen werden, in der sie gesendet wurden. Sie möchten wirklich nicht, dass sich diese Art der Bestellung ändert, da dies Ihren Code verständlicher macht und Sie als Anwendungsprogrammierer erheblich entlastet.
Wenn Sie jedoch Nachrichten mit unterschiedlichen Tags gesendet haben, werden die Übereinstimmungskriterien geändert, und Sie können problemlos die zweite vor der ersten empfangen. Einzelheiten finden Sie im zweiten Beispiel im entsprechenden Teil des Standards . Ich hoffe , wenn Sie zwei Teile Ihres Codes gleichzeitig senden, trennen Sie die groben und feinen Nachrichten bereits mithilfe von Tags und versuchen nicht, zusätzlich zur Reihenfolge der Nachrichten ein eigenes Protokoll zu implementieren. Für die meisten mir bekannten MPI-Programmierer ist dies eine Selbstverständlichkeit.
Unter der Annahme, dass Sie dies tun, befürchten Sie wahrscheinlich, dass feinkörnige Nachrichten mit hohem Volumen Ihr Netzwerk verstopfen, wenn Sie grobe Nachrichten senden möchten. Mein allgemeiner Rat dazu lautet: Wenn es sich nicht um ein Leistungsproblem handelt, das Sie derzeit tatsächlich messen können, sollten Sie sich noch nicht darum kümmern, es zu beheben. Sie scheinen in einem der obigen Kommentare zu bestätigen, dass es sich noch nicht um ein Problem handelt.
Eine mögliche Lösung, die Sie in Betracht ziehen könnten , wäre die Verwendung eines nicht blockierenden Kollektivs (NBC) wie Bcast oder Barrier, um alle zu benachrichtigen, dass die Grobphase abgeschlossen ist und bereit ist, die Lösung zu senden. Höchstwahrscheinlich wird der ABC-Verkehr nicht priorisiert, aber benachrichtigte Prozesse können zumindest das Senden feiner Lösungen stoppen, bis die groben Sendungen abgeschlossen sind. NBCs werden in MPI-3 sein oder Sie könnten versuchen, libNBC zu verwenden, wenn Sie nicht so lange warten können.
Auch dies scheint jedoch eine Menge Arbeit für etwas zu sein, das noch nicht nach einem Leistungsproblem klingt.