3

MPI を使用して、単一のマスター プロセッサとワーカー/クライアント プロセッサがあるタスク スケジューラを開発したいと考えています。各ワーカーには、計算に必要なすべてのデータがありますが、作業するインデックスはマスターから取得します。計算の後、ワーカーはデータをマスターに返します。問題は、一部のプロセスが高速になることと、一部が低速になることです。各反復でマスターが (ブロッキング/非ブロッキング) データを送受信するようにループを実行すると、割り当てられた前のインデックスから現在のワーカーからデータを受信するまで、次のステップに進むことができません。要するに、ワーカーの計算に時間がかかりすぎると、それが制限要因になり、ノンブロッキング手法が使用されていても、マスターは次のワーカーにインデックスを割り当てることができなくなります。

私は、MPI はこれを行うためのパラダイムではないかもしれないと考え始めています。Python は、タスク スケジューリングを行うための優れたプラットフォームでしょうか?

4

2 に答える 2

3

MPI_Irecv()これは、 とを使用して絶対に可能MPI_Test()です。マスター プロセスが行う必要があるのは、ワーカー プロセスごとにノンブロッキング受信をポストし、ループ テストで着信データをそれぞれテストすることだけです。プロセスが完了したら、それに新しいインデックスを送信し、新しい非ブロッキング受信をポストして、続行します。

于 2012-06-24T20:34:01.170 に答える
1

プロセスごとに 1 つの MPI_IRecv が 1 つのソリューションです。これには、作業が完了したときに一致しない MPI_IRecv をキャンセルする必要があるという欠点があります。

MPI_ANY_SOURCE は代替パスです。これにより、マネージャ プロセスはいつでも 1 つの MPI_IRecv を未解決にすることができ、MPI_Send の「次の」プロセスは MPI_ANY_SOURCE と一致します。これには、実行する追加作業がない場合に、MPI_Send でいくつかのランクがブロックされるという欠点があります。ある種の「これ以上何もすることはない」という合図を出す必要があるので、ランクはきれいに退出することができます。

于 2012-06-25T22:32:34.790 に答える