2011-01-26 8 views
5

MPIライブラリを使用して最短パスをチェックするプログラムを作成しています。 2つのシナリオがあります:
バッファの最初のスロットにはresultBuff[0] = 1と表示され、より良いパスを得るためにバッファの残りの部分を調べる必要があります。
もう1つのケースはresultBuff[0] = 0であり、バッファの他のセルの値はわかりません。場合MPI_Recv:1つのサイズと異なるサイズの受信

MPI_Isend((void*)sendBuff, 11, MPI_INT, 0, 1, MPI_COMM_WORLD, &request); 

がより良いパスが見つかりませんでした:

私はより良い道を見つけた場合は

し、それを保存しresultBuff[1]resultBuff[10]に:私は別のMPI_Isendコールを使用するため

は可能です:

MPI_Isend((void*)sendBuff, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &request); 

そして、両方のケースで私は

を使用します10
MPI_Recv((void*)resultBuff, 11, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status); 

結果を受け取る。

これは機能しますか?
場合は、より良いパスを送信しない場合、私は通信費を節約しますか?

注:メッセージの不足がちょうど同様にその情報を伝えることができます:resultBuffはサイズ11

答えて

1

はい、これを行うことができます。 MPI標準とman pagesからMPI_Recvの場合、「count引数はメッセージの最大長を示し、実際の数はMPI_Get_countで確定できます。これは、MPI_Recv()から返されたstatusオブジェクトを使用して呼び出します。

通信コストを節約するために、このような短いメッセージは、帯域幅ではなくメッセージを送信する待ち時間によって支配されます。

0

であるあなたは、「私は何も見つからなかった」と言うにメッセージを送信する必要はありません。受信者はちょうどMPI_Testを定期的に呼び出して、新しいメッセージが受信されたかどうかを確認するためにステータスオブジェクトを調べることができます。

+1

それは質問に答えない、それはちょうどそれを回ります。 – Nayish

+1

パス計算が終わった時点を知る必要があります。私は "私は終わった"というメッセージを送る必要があります、それだけで良いパスを見つけたかどうかわかります。 – hizki

関連する問題