2017-02-17 1 views
0

senden Ich möchte so einen Wert an eine Position in Array eines anderen Prozesses senden. soMPI - wie ein Wert an eine bestimmte Position im Array

1st process: MPI_ISend (&val..., process, ..) 
2nd process: MPI_Recv (&array[i], ..., process, ...) 

Ich weiß also, die i-Nummer auf dem ersten Prozess, auch ich weiß, dass ich nicht eine Variable verwenden kann - i zuerst senden und dann val, wie andere Prozesse i (zweiter Prozess ändern können, ist Akzeptieren von Nachrichten von vielen anderen).

Antwort

1

Zunächst sollte nicht alle anderen senden/empfangen i überschreiben/nicht überschreiben. Sie sollten Ihre Nachrichten klar und getrennt halten. Das ist, was die tag ist! Außerdem kann rank_2 unterscheiden, welcher Rang die Daten gesendet hat. So können Sie einen i für jeden Rang haben, auf den Sie eine Nachricht erwarten.

Schließlich möchten Sie vielleicht einseitige MPI-Kommunikation (MPI_Win) auschecken. Mit dieser Technik kann rank_1 die Nachricht direkt an der Position, die nur Rang_1 bekannt ist, in das Array von rank_2 "fallen lassen".

+0

Ich habe ein Problem, dass Tags für andere Zwecke verwendet werden und der erste Prozess sollte zum Beispiel 4 Werte an den zweiten Prozess im Zyklus senden, also sollte ein anderer, und so weiter. Ich kann sie nicht packen, da sie nicht an aufeinanderfolgenden Orten sind. MPI_Put und Get sind nicht wirklich wünschenswert. Also, nur dann befreien Tags und teilen Sie die Informationen mit ihnen hilft? –

+0

Ich bin mir nicht sicher, aber klingt für mich, dass 'MPI_Gatherv' Ihre Probleme lösen könnte? Sie packen die Nachrichten in einem Array pro Rang (füllen Sie es in nicht aufeinander folgenden Orten, [oder ist das unmöglich?]) Und sammeln Sie diese lokalen Arrays in Rang_2. – SamVanDonut

Verwandte Themen