OpenMPなどの共有メモリモードでMPI-3.0を実行する方法


14

5次元の人口バランスモデルを数値的に解くためにコードを並列化します。現在、FORTRANには非常に優れたMPICH2並列化コードがありますが、パラメーター値を大きくすると、配列が大きくなりすぎて分散メモリモードで実行できなくなります。

15ノードのクラスターにアクセスできます。各ノードには2つの8コアCPUと128GBのRAMがあります。共有メモリモードでMPI-3.0を使用してプログラムを実行し、各プロセスが各アレイの独自のコピーを生成しないようにしたいと思います。

クラスターで何かを実行する前に、Ubuntuを実行しているデスクトップでテストする必要があります。2つの8コアCPUと128 GBのRAMを備えているという点で、本質的にクラスターの1つのブレードです。コードを書いてテストしますので、Ubuntuコンピューターでプログラムを実行するように応答してください。

MPI-3.0をデフォルトの分散メモリモードの代わりにOpenMPのような共有メモリモードで実行する方法があることを読みました。

質問:

  1. コードを変更するにはどうすればよいですか?次のような他のMPI関数への呼び出しを追加する必要がありMPI_WIN_ALLOCATEますか?

  2. 共有メモリモードでMPI-3.0を実行するようにコードをコンパイルするにはどうすればよいですか?複数のノードにまたがる場合、これは異なりますか?

可能な場合は、サンプルのコンパイルスクリプトを提供してください。また、GNUコンパイラしかありません。私が使用しているクラスターは、Intelコンパイラーをサポートしていません。


1
はい、共有メモリシステムでMPIを実行できるはずです。ただし、実際にプログラムされる方法は同じです。コードは、共有メモリシステムと分散メモリシステムの両方で同じである必要があります。実行方法が唯一の違いです。
NoseKnowsAll

さらに、これはテストしていませんが、コマンドmpiexec -n 8 /path/to/applicationを使用してコードを実行し、コンピューターを偽装して8つの異なるノードがあると思わせることができるはずです。
NoseKnowsAll

既に共有メモリシステムで実行していますが、OpenMPのようにコンピューティングコアでRAMを共有する必要があります。アレイの一部は6 GBであるため、各ノードのすべてのコアが共有メモリモードで動作する必要があります。
フランクリン

2
まあ、これは研究プロジェクトのためです。したがって、問題のサイズを拡大する必要があります。私はすでに作業コードを持っているので、スケールアップを妨げる唯一のものは必要なメモリです。MPI-3.0が、一方的なコミュニケーションカテゴリの下で追加された新しい通話機能とメモリを共有できることを示唆するMPI会議のドキュメントとパワーポイントに出会いました。MPI_WIN_ALLOCATE_SHAREなどの関数
フランクリン

2
www.eurompi2014.org/tutorials/hoefler-advanced-mpi-eurompi14.pdf cs.utexas.edu/users/flame/BLISRetreat2014/slides/...
フランクリンベッテン

回答:


0

Stack Overflowにもこのリンクがあります。私は永遠に私のような質問を探していたと誓いますが、スタックオーバーフローで質問を検索する最良の方法は、質問を開始することであり、同様の投稿を提案します。

とにかく、実際にはopenmpのような共有メモリモードでMPI3.0 +を実行できると言うリンクがあります。私が見つけた他の情報源もありますが、提案できるものもありますが、その方法を説明したり、それを理解するためのリソースを与えたりすることはできません。

/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp

このリンクのここに記載されているアドバイスに従った後、USE 'mpi_f08'をコードの先頭に配置することで問題が発生しました。現在、mpi_f08を使用するためのFORTRAN2008サポートが明らかに不足しているgfortran-4.8を使用しています。このリンクには、おそらくintel fortran 2008コンパイラを使用している人がいたでしょう。Fortran2003までをカバーするUSE mpiを使用できます。ただし、Fortran 2003には、MPI_WIN_ALLOCATE_SHAREDなどのリモートメモリアクセス関数を使用するために必要なType()関数があるとは思わないため、FORTRAN2008なしでは使用できません。しかし、私は実際にそれを確かに言うのに十分なリソースを持っていませんが、私が見つけたものはそれを示唆しています。


1
MPI_Win_allocate_sharedは、3つのFortranインターフェイスすべてで使用できます。さらに、Fortran 2003 ISO_C_BINDINGおよびCインターフェースを使用して独自に作成できます。
ジェフ

FortranからRMAを使用するためにType()が必要な理由を教えてください。そのような制限はありません。RMAはF77で長年使用されています。
ジェフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.