2011-01-27 29 views
0

私はC++の数値処理プログラムを持っています。構造体である。)、A)データ入力、データ準備OpenMPとMPIに移植可能なC++プログラムの複雑なループ?

B)「大きな」ループ

(両方の場合で異なる変数の多くをグローバルおよびローカルデータを使用

C)後処理結果と書き込みデータ

最も強い部分は「b」です。これは基本的にループです。私はクラスタ内でプログラムを高速化する必要があります。ブレード25本、コア4本。私はここでOpenMPとMPIを使うことができるのだろうか、一般的なケースではなくチュートリアルを指すことができるのかどうか疑問です。

おかげ

+2

関連するコードサンプルを投稿しない限り、コードを最適化することはできません。 –

+0

これはループが実際に何をするかによって大きく異なります。例えば、各反復を他の反復とは独立して実行することができますか(そして正しい結果を与えるか)?どのような種類のデータ依存関係がありますか?詳細は、私たちが良い答えを与えるのに役立ちます。 – suszterpatt

+0

25別々のブレードにはMPIが必要です。正しく覚えていれば、OpenMPは共有メモリアプリケーション用です。あなたのグローバルデータはループ中に変更されますか?そのような場合は、すべてのノード間でこの変更をプッシュして、最新の状態に保つ必要があります – Will

答えて

1

は実際に、あなたは両方を使用する必要があります。

各ブレードを完全に利用するために、MPIを使用してブレードとOpenMP間でタスクを分散します。それぞれのケースでどのようにメモリと共有が機能するかを理解するために、時間をかけてください。

0

OpenMPを使用して、ブレード間でタスクを分割することはできません。いくつかの部分をループして、それらに容量を分配してみてください。 たとえば、Nサイズの2つのベクトルを合成する場合。 N/2は1つのノード上にあり、別の部分は別のノード上にあります。

しかし、ブレード間の透過コストがわかります。したがって、あなたの仕事が実際には素晴らしいものではない場合。あなたが4つのコアにそれを配布すると良いかもしれません。

関連する問題