未知のソースからのMPI RECV
-
30-09-2019 - |
質問
MPIで実装しています。これにより、主なプロセス(RANK = 0)が、ルートでのみ知られている変数の値を要求する他のプロセスからリクエストを受信できるはずです。ランク0でMPI_RECV(...)を作成する場合、リクエストをルートに送信するプロセスのランクを指定する必要がありますが、プロセスが1,2,3の順序で実行されないため、制御できません。 、.... ....どのようなランクからリクエストを受け取り、エミッティングプロセスの数を使用して必要な情報を送信するにはどうすればよいですか?
解決
これは、Cを使用していることを前提としています。C++とFortranには同様の概念があります。指定するだけです MPI_ANY_SOURCE
のソースとして MPI_recv()
. 。ステータス構造には、メッセージの実際のソースが含まれています。
int buf[32];
MPI_Status status;
// receive message from any source
MPI_recv(buf, 32, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
int replybuf[];
// send reply back to sender of the message received above
MPI_send(buf, 32, MPI_INT, status.MPI_SOURCE, tag, MPI_COMM_WORLD);
他のヒント
MPI_ANY_SOURCEは明らかな答えです。
ただし、すべてのランクがランク0にリクエストを送信する場合、MPI_IRECVとMPI_TESTALLを組み合わせてパターンとして機能する場合があります。これにより、MPI_SENDコールを任意の順序で実行することができ、情報をMPI_IRECV呼び出しが一致する順序で受信および処理できます。
所属していません StackOverflow