5

100ノードの分散メモリクラスターでCシリアルコードを並列化したい。クラスターは、それぞれがinfinibandによる4つのコアを持つ25のブレードで構成されています。以前は、PBSを使用して、プログラムの複数のシリアル実行を異なるノード間で分散させていました。今私は疑問に思う:

  1. この場合、OpenMP、MPI、またはOpenMPIの最良の選択肢は何ですか(現時点では、学習を始めているので、混合アプローチを試したくありません)。
  2. 例/チュートリアルはどこにありますか?
  3. メインのforループを備えた単純なシリアルコードの場合、OpenMP / MPI / OpemMPIは、PBSのようなキューイングアプローチよりも常に優れたパフォーマンスを発揮できますか?
4

2 に答える 2

15

分散メモリは、共有メモリコンピューティング用のOpenMPを除外します。MPIは標準であり、OpenMPIはその標準の実装です(MPICHやLAM-MPIなどの他のものがあります)。それで

  1. MPI、およびOpenMPIは、その完全に立派な実装です。ただし、MPIがインストールされていないクラスターを見つけることは比較的珍しいと思います。そのため、既に持っているMPIインストールを選択することをお勧めします。あなたは確かにこれについてシステムのマネージャーに話すべきです。そして、あなたは確かにあなたが何をしているのかを知らずにクラスターにOpenMPIをインストールしようとすべきではありません。

  2. あらゆる所に。ここから始めるの が良いでしょう。

  3. PBSはジョブスケジューリングシステムです。あなたのようなクラスターでは、通常、MPIのインストールとジョブスケジューラのインストールの両方があります。PBSでない場合は、GridEngineが最も可能性が高くなります。

すでにご存知のとおり、PBS(またはGrid Engine)を使用して、複数のシリアルジョブをクラスターにディスパッチできます。また、これを使用して、単一の並列ジョブをクラスターにディスパッチし、必要な数のプロセッサーで実行することもできます。しかし、あなたの質問は、あなたの問題が驚異的並列であり、MPIがあなたにとってやり過ぎかもしれないという可能性を提起します。プログラムの並列化に取り組む前に、イタリック体でGoogleを使用してください。ただし、間違いなく結果として得られる純粋な楽しみを求めている場合を除きます。

于 2010-12-15T11:01:25.687 に答える
2

OpenMPは共有メモリコンピュータ用です。分散メモリでは使用できないと思います。したがって、MPIを使用する必要があります。

優れたMPIチュートリアルは次のとおりです: https ://computing.llnl.gov/tutorials/mpi/

于 2010-12-15T10:55:20.520 に答える