3

MPI サポートを追加したい C++ で実装されたプログラムがあります。名前空間 MPI とすべてを備えた、C++ 用の MPI バインディングがあります。

私の場合、クラスターへの並列化プロセスに適した特定のオブジェクトがあります。

私の質問は次のとおりです。

  • 誰かが前にこのようなことをしたことがありますか? これを実装するための最善の方法についてアドバイスをいただけますか?
  • コンストラクター内で MPI を初期化するにはどうすればよいですか? クラスのコンストラクター内で MPI を初期化した後、すべての中間呼び出しも並列化されますか?

例えば:

MyClass obj;

x = x; //this will be parallelized ?
onj.calc();

y = x++; //this will be parallelized ?

z = obj.result();
4

4 に答える 4

7

MPI は自動的に何も並列化しません。ノード間でデータを送信するためのインターフェースを提供するだけです。コードは、各ノードで独立して通常のシーケンシャル コードとして記述および実行され、時々他のノードにデータを送信したり、他のノードからデータを受信しようとしたりします。

于 2009-07-03T15:28:12.373 に答える
6

古いスレッドに耳を傾けたところ、OpenMPI とBoost::MPIがうまく機能することがわかりました。ライブラリのオブジェクト指向の設計は、少し強化されているかもしれませんが、純粋な MPI よりも、特に多くの型の自動シリアル化と、gather/reduce 関数のかなり拡張可能なインターフェイスと、ユーザーの種類。

于 2010-02-07T08:12:36.150 に答える
6

Gropp MPI Bookを手に取ることを強くお勧めします。これは基本的な MPI に非常に役立ちます。

于 2009-07-03T15:27:42.767 に答える
3

背景情報として:

MPI を使用するほとんどのアプリケーションは、Fortran または C で記述されています。MPI の主要な実装はすべて C で記述されています。

MPI C++ バインディングのサポートはせいぜい大ざっぱです。一部の MPI データ型は利用できません (MPI_DOUBLE など)。I/O とヘッダーがソース ファイルに含まれる順序に問題があります。MPI ライブラリが C でビルドされ、アプリケーションが Fortran または C++ でビルドされている場合、名前マングリングの問題があります。mpich2 FAQ には、これらの問題を解決するのに役立つエントリがあります。私は Open MPI にあまり詳しくありません。それは Fortran と C++ での特定の動作です。

特定の質問について:

MPI とは何か、またアプリケーション コードが MPI ライブラリと対話する方法について、根本的な誤解があると思います。

Parallel Programming with MPIは、MPI を使用したプログラミングを学習するための優れたリファレンスです。コード例は C で記述されており、ほとんどの MPI API が例に示されています。この本を読んで、並列プログラミングとは何かを学ぶことを強くお勧めします。

于 2009-07-03T16:02:10.767 に答える