2

マスターワーカープログラムを実装しようとしています。

私の主人は労働者がやろうとしている仕事を持っています。労働者が仕事を完了するたびに、彼はマスターに新しい仕事を要求し、マスターはそれを彼に送ります。ワーカーは最小限のパスを計算しています。作業者は、取得したグローバル最小値よりも優れた最小値を見つけると、マスターを含むすべての人に送信します。

ワーカーとマスターがを使用してデータを送信することを計画していますMPI_ISEND。また、受信はブロックする必要があると思います。マスターは、誰も仕事を求めていないか、最良の結果を更新していない場合は何の関係もないので、受信を待つことをブロックする必要があります。また、各労働者は、仕事を終えた後、新しいものを入手するためにレシーブを待つ必要があります。

それでも、非ブロッキング非同期送信を使用し、同期受信をブロッキングすることの影響についてはよくわかりません

別の方法としてはを使用していると思いますがMPI_IPROBE、これで最適化できるかどうかはわかりません。

私がしていることが正しいかどうかを理解するのを手伝ってください。これは正しい解決策ですか?

4

1 に答える 1

4

ブロッキング送信と非ブロッキング受信を一致させることができ、その逆も同様であり、問​​題は発生しません。ただし、ワーカーが作業している間、マスターが本当に何もする必要がなく、ワーカーが作業単位を完了した後にブロックする必要がある場合、その面で非ブロック通信を行う理由はありません。マスターは でブロッキング受信をMPI_ANY_SOURCE送信でき、ワーカーはブロッキング送信を使用して結果を送信できます。これは、マスターで一致する受信が既に送信されているためです。

したがって、マスターとワーカーの間で作業単位を交換するための Send-Recv と、新しいグローバル ミニマムをブロードキャストするための Isend-Irecv が必要です。

于 2011-01-20T20:28:40.947 に答える