1

MPI(Java実装)で小さなプログラムを書きたい 変数x(double変数)を宣言しています。スレッドは変数を変更しようとします (ランダムな変更としましょう)。スレッド i が古い値よりも小さい X の新しい値を見つけると、変数 X の値を更新できるように、他のスレッドへのブロードキャストが行われます。

MPI で Bcast 関数を見てきましたが、すべての例で、変数が変更されているかどうかに関係なく、すべてのスレッドによって呼び出されていました。

4

1 に答える 1

2

これは、マルチスレッド環境 (OpenMP や Java スレッドなど) での実装が非常に簡単で、MPI での効率的な実装が非常に困難または不可能なシナリオの 1 つです。N通常のアプローチは、最適な値がすべてのステップで伝達されるようにアルゴリズムをリファクタリングし( N1 に等しい可能性がありますが、通信オーバーヘッドのために非常に非効率になる可能性があります) Intracomm.Allreduce、reduce 操作を に設定して使用しMPI.MINます。各プロセスは独自の最小値を提供し、リダクションはグローバルな最小値を返します。グローバル最小値を保持するプロセスのランクも知りたい場合は、MPI.MINLOC代わりに使用する必要があります。

並列遺伝的最適化を実装しようとしている場合、インスピレーションを与えるC++ ライブラリがいくつかあります。

于 2014-09-23T18:10:58.650 に答える