2009-07-03 6 views
2

私はMPIサポートを追加したいC++で実装されたプログラムを持っています。 C++のためのMPIバインディングがあり、ネームスペースMPIとすべてがあります。C++プログラムへのMPIサポートの追加

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

私の質問は以下のとおりです。

  • は、誰もが前にこのような何かをやっていますか?これを最もうまく実装する方法に関するアドバイスを受けることはできますか?
  • コンストラクタ内でMPIを初期化するにはどうすればよいですか?クラスのコンストラクタ内でMPIを初期化した後、すべての中間コールも並列化されますか?たとえば、

MyClass obj; 

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

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

z = obj.result(); 
+1

あなたはOpenMPを意味するのでしょうか? – tstenner

答えて

6

私は本当にそれは本当に基本的なMPIのために役立ちます、Gropp MPI Bookを拾ってお勧めします!

+0

ありがとうございます。 – lvcargnini

+0

しかし、通常のアプリケーションとしてMPI C++バインディングを使用しています。それが私の要点です。これはOOプログラミングでどのように働くのですか – lvcargnini

+0

MPIバインディングは、実際には単純にメソッド呼び出しであり、オブジェクト指向プログラミングとほとんど似ていないので、あるコンピュータから別のコンピュータに情報を渡す方法をそのまま使用しなければなりません。 –

7

MPIは自動的に何かを並列化しません。ノード間でデータを送信するためのインターフェイスを提供します。あなたのコードは、各ノードで独立した通常のシーケンシャルコードとして書かれ、実行されます。他のノードにデータを送信したり、他のノードからデータを受信しようとします。背景情報として

+0

Nノードで同じプロセスを開始するのは正確ではありません。メッセージIを使用してノード間で情報を共有および更新したり、特定のノードに集中したり、すべてのノードの値を更新することがあります。私の要点は、これがOOでどのように動作するかです。オブジェクトは並列化のみされますか?そのため、オブジェクトの内部で使用されるMPI呼び出しは、オブジェクトの内部でのみ表示されます。またはオブジェクトの外部の環境も影響を受けますか? - lvcargnini 15分前 – lvcargnini

+0

新しいデータを発行せずに、異なるノードで同じ正確なプロセスをスポッティングするのはどういう意味ですか?私が見たMPIは、C環境やFORTRAN用に書かれています...これらの実装ではMPI用のOOPはありません。なぜ、OOPについて質問しているのかわかりません...メソッドの中にMPIコードを置くとクラスの場合、メソッドに入れる他のコードと同様に、そのメソッドが実行されるときにMPIコードが呼び出されます。 –

3

:MPI C++バインディングのMPIを使用するほとんどのアプリケーションは、Fortranのか、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を例として示しています。この本を読んで、並列プログラミングが何であるかを知ることを強くお勧めします。

+0

+1は基本的な誤解を指摘しています。 –

+0

"MPI自体がオブジェクト指向の設計をしているので、これは問題ありません。私の知識では削除される可能性があるので、C++バインディングを使用することをお勧めします。 MPI 3.0から(そのような提案がある)」 "MPI-2.2のC++バインディングを廃止するための提案があります(これはまだありますが、 3.0。 – lvcargnini

+0

私はまだMPI 3.0についてあまり心配していません。まず、3.0のハードリリース日はありません。第2に、MPIの主要な実装はすべて、ユーザー/顧客のための簡単な移行を可能にするために、引き続き2.0標準をサポートします。フォールバックとして、2.0標準をサポートする最後のMPIリリースのコピーをいつでも取得して、アプリケーションの残りの寿命についてそれを削除することができます。 –

6

古いスレッドでは、私はOpenMPIとBoost::MPIがうまく動作することがわかりました。ライブラリのオブジェクト指向設計はちょっと難しいかもしれませんが、純粋なMPIよりも、特に多くの型の自動シリアライズや、収集/削減関数の拡張可能なインタフェース、ユーザータイプ。

関連する問題