並列計算について質問があります。C++ で記述されたかなり大きなコードがあり、共有メモリ ベースで OpenMP を使用して並列化されています。この共有メモリ コードを分散メモリ コードに変換することは可能ですか?
可能であれば、どのような手順を実行する必要がありますか? ご協力ありがとうございます。
ありがとう、ラフル・シン
並列計算について質問があります。C++ で記述されたかなり大きなコードがあり、共有メモリ ベースで OpenMP を使用して並列化されています。この共有メモリ コードを分散メモリ コードに変換することは可能ですか?
可能であれば、どのような手順を実行する必要がありますか? ご協力ありがとうございます。
ありがとう、ラフル・シン
共有メモリと分散メモリは、並列コンピューティングにおける 2 つの異なるパラダイムであり、多くの場合、異なる思考戦略を意味します。UPC や MPI などの一部の並列プログラミング フレームワークは、共有マシンまたは分散マシンで実行するようにエミュレートできますが、そうしないほうがよいでしょう。メモリーマシン。OpenMPについてはわかりません。
どちらの場合でも、私のアドバイスは、まず分散アーキテクチャでコードを並列処理する方法を考えてから、MPI を使用することです。たまたま計算科学のビジネスに携わっている場合はPETSc
、Argonne National Lab の やTrilinos
Sandia National Lab の など、非常によく書かれたパッケージが既にあり、開発を大幅に高速化するのに役立つ可能性があります。
並列化して共有メモリー・コンピューターで実行できるほとんどのプログラムは、並列化して分散メモリー・コンピューターで実行することもできます。そうです、あなたの OpenMP プログラムが解決する問題は、おそらく分散メモリ コンピューター上で解決できます。ただし、OpenMP プログラムを分散メモリ プログラムに変換することは別の問題です。あるモードの並列思考を別の並列実行モードに適応させるよりも、逐次実装から始めてそれを並列化する方がよいかもしれません。
したがって、あなたが求める最初のステップは、プログラムを非並列化することかもしれません。しかし、コメンテーターがすでに指摘しているように、あなたのアプリケーションについて多くの知識がなければ、私がすでに持っている以上に有益なアドバイスを提供することは非常に困難です (そして、私は非常に有益なアドバイスをまったく提供していません)。