0

hist(1:1000)OpenMPI を使用して、異なるプロセッサで同じ配列を呼び出して、1 つのプロセッサが変更したときに、histこの変更が残りのプロセッサで更新されるようにしたいと考えています。

コードを作成して宣言しhist(1:1000)ましたが、問題はhist各プロセッサで個別に更新されることです。次に、データを「マスター ノード」に送信して、スレーブの情報に基づいて別のヒストグラムを更新しますが、これは私が欲しくないもの。各プロセッサで同じヒストグラムを更新したいと考えています。

OpenMPIでこれを行うことは可能ですか?

4

3 に答える 3

6

私の知る限り、そのようなことは MPI では不可能です。MPI の目的は、あるプロセスから別のプロセスへのメッセージ パッシングを実装することです (そのため、メッセージ パッシング インターフェイスという名前が付けられました)。共有メモリを使用したい場合は、少なくとも gcc/gfortran とおそらく他の多くのコンパイラでサポートされている OpenMP のようなものを使用するのが最善の策です (おそらくそこで可能だと思いますか?)。スレッドを使用することもできますが、最終的には、MPI のように何千ものプロセッサに拡張することはできません。あなたがしていることに応じて、MPI の集団操作を試すことができます。歴史。MPI は、配列が変更された後にすべての配列を合計できます...

たとえば、これを参照してください

http://mpi.deino.net/mpi_functions/MPI_Allreduce.html

(必要な操作はおそらく MPI_SUM です)

于 2012-04-11T23:35:26.053 に答える
1

私はあなたのアプリケーションを正確には知りませんが、MPI_Bcast 関数に興味があるかもしれません。これは配列をすべてのプロセッサにブロードキャストします。ただし、多くの MPI_Bcast を使用することは、処理ではなく通信に長い時間がかかるため、通常はお勧めできません。

于 2012-04-11T23:46:23.683 に答える
0

一方的な通信を利用して、1 つのプロセス上のアレイを他のプロセスと共有できます。しかし、これは多くの人に次善の解決策と見なされています。おそらく、アルゴリズムを再考し、メッセージ パッシング パラダイムに沿って定式化することをお勧めします。

于 2012-04-12T22:33:31.500 に答える