3

標準の MPI マスター/スレーブ システムを実装しています。作業を分散するマスターがあり、チャンクを要求してデータを処理するスレーブがあります。

ただし...単純な方法で実装された場合 (rank==0 がマスターで、残りはスレーブ)、マスターは実際の作業を行わなくなりますが、実質的に実際の計算能力を必要としないもののために 1 つのコアを使用します。そこで、マスターに別の「スケジューラ」スレッドを実装しようとしましたが、MPI メッセージをそれ自体に送信する必要があり、実際には機能しませんでした...

これを解決する方法はありますか?

4

1 に答える 1

3

いくつかのグーグルの後に気づいたように、タグを使用して自分自身にメッセージを送信できます。タグは一種のフィルターです: tag==1 のみに対してrecvを実行すると、それらのメッセージのみが受信され、後のメッセージが前のメッセージを追い越すことができます。

したがって、解決策は次のとおりです。

  • 「スケジューラーからワーカーへ」および「ワーカーからスケジューラーへ」のメッセージに異なる ID のタグを付ける
  • rank==0 の場合: スケジューラ スレッドを開始します
  • その後、ランクに関係なく仕事を依頼。

この方法では、ランク 0 のワーカーは、「スケジューラーのみが受信する」タグを持つため、独自の「仕事を与えてください」メッセージを受信しません。

編集:これは実際にはスレッドセーフではないようです...(= Pythonで書かれていても「free()」でクラッシュすることがあります...)ので、実際の &実績のあるソリューション:)

于 2012-11-02T02:28:25.503 に答える