クラスタプログラムに並列プログラムを変換します。 OpenMPのからか?

StackOverflow https://stackoverflow.com/questions/972837

  •  13-09-2019
  •  | 
  •  

質問

私は、OpenMPベースの並列プログラムを受け取り、クラスタ上で実行されるコードコンバータを書きたい。

どのように私はこの問題については行くのですか?私は何のライブラリを使用していますか?どのように私はこのための小さなクラスタを設定するのですか?

私はそれが非常に硬く、インターネット上のクラスタコンピューティングについての良い材料を見つけるために探しています。

編集:それは不可能だ場合、どのようにIntelがそれをするのでしょうか?インテル®コンパイラーは、私がしたい正確に何をやっているようです。私が実行したい任意の特定のアプリケーションを持っていません。私は、「コンバータ/コンパイラ」ではなく、アプリケーションを書きたいです。私はそれは、アプリケーションがカスタム構築物で書かれていることを意味していても、共有メモリは、分散メモリとは異なることを理解し、そうでない場合、すべてのケースについて、その後、いくつかの特定のケースのために、メモリを同期する方法がなければならない。

役に立ちましたか?

解決

良いアイデアではないように私には思えます。

OpenMPの背後にある基本的な考え方は、データ共有並列実行です。共有データへのアクセスはあなたに何も費用はかかりませんときに、うまく動作します。すべてのスレッドは、共有キャッシュまたはRAM内の変数にアクセスすることができます。

クラスタ内のコンピュータはメモリを分散しているので、

のクラスタ計算は、メッセージパッシングを利用します。一つのプロセスは別のものからのデータを必要とするとき、あなたは、ネットワーク上を通過するデータを管理する必要があります。それは時間のかかる作業です。

あなたは、このようなコンパイラを書きたい場合は、

だから、あなたは、OpenMPの各データアクセスのための操作をデータ放送(MPIから例えばMPI_Bcast)を実装する必要があります。これは、すべての並列パフォーマンスを殺すでしょう。

他のヒント

インテルには実装していOpenMPののx86の64ビット・クラスタのための彼らのC ++およびFortranコンパイラで動作します。あなたは自由のためにこれらのコンパイラの30日間評価版を入手することができます。それ以外は、Zifreは主に右です。あなたは、スケーラビリティと懸念している場合は、弾丸をかむと心に分散システムで設計された別のプログラミングモデルでは、あなたの並列プログラム(MPI、CUDA、インテル®Cilk™、...)を書きます。あなたのアプリケーションについて、もう少し情報を提供した場合、我々はその前にもっと有用なガイダンスを提供することができるかもしれません。

これは単に不可能です。あなたはそれがクラスタ上で動作させるために完全に異なる方法でコードを構造化する必要がある(複数のマシンをプログラミングすると、1台のマシンのプログラミングからの非常にの異なる)。

これを行うには魔法の妖精の塵がありません。

あなたは心の中でクラスターを使用してプログラムを記述する場合は、

一方で、それは(それが明らかに遅くなりますが)単一のマシン上でそれを実行することが可能である。

SCORE / SCASHとオムニのOpenMPコンパイラ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top