2012-03-15 14 views
5

特定のタグを持つメッセージを受信したランクのいずれかにメッセージを送信したいとします。ランクがあればメッセージを受信し、メッセージが消費されます。 MPI_Recv()では、MPI_ANY_SOURCE/MPI_ANY_TAGを使ってメッセージを受け取ることができますが、MPI_Send()はこれを行うことができません。宛先が不明なメッセージを送信するにはどうすればよいですか? 受信後、ソースプロセスに返信する必要があるため、MPI_Bcast()は実行できません。おかげさまで MPIで特定の宛先のないメッセージを送信するにはどうすればよいですか?

+0

受信機が必要なデータを知っている場合は、片面MPI操作、つまり「MPI_Get」を使用できます。 –

+1

この質問は、http://scicomp.stackexchange.comで本当によく受け取ります。 –

答えて

4

私は、ワーカープロセスが受信準備ができていることをマスタに知らせるように指示します。マスターは、どのランクが準備ができているかを追跡し、1つを選んで(最も低いランク、ランダム、ラウンドロビン)、送信して、「準備完了」フラグをクリアします。

1

ランダムなランクにメッセージを送信したいだけですか?

MPI_Comm_size(MPI_COMM_WORLD, &size); 
sendto = rand() % size; 
MPI_Send(buffer, count, MPI_CHAR, sendto, 0, MPI_COMM_WORLD); 
1

短い答えは:MPI​​でこれを行うことはできません。

少し長めの答えは次のとおりです。おそらくこれはしたくないでしょう。私はあなたが何らかの仕事を盗み出すことを試みていると推測しています。 suszterpattが示唆しているように、片方向のコミュニケーションを使って送信プロセスから作業を取得することもできますが、ロックを使用する必要があります。ローカルプロセスグループの考えがない限り、すなわち、1,000プロセスを1つのプロセスから盗み取ることはできません。物事を分解する必要があります)。

関連する問題