2017-02-12 14 views
1

私は集中的に実行するためにメモリが不足しているMPI並列化を使用したFortranコードを扱っています。シミュレーション開始時に必要なメモリのほとんどすべてを割り当てています。サブルーチンの静的メモリ割り当ては通常小さいですが、これらのサブルーチンのためにメモリが使い果たされた場合、シミュレーションの早い段階で発生します。MPI内部バッファメモリの問題

Insufficient memory to allocate Fortran RTL message buffer, message #174 = hex 000000ae.

私は考えることができる唯一のことは、私のMPI呼び出しは、私が最初に事前に割り当てすることはできませんメモリを使用していることである:私の問題は、これまでのシミュレーションに、私のようなメモリエラーに実行していますということですシミュレーションのシミュレーションが実行されている間に私は主にMPI_Allreduce、MPI_Alltoall、MPI_Alltoallvを使用していますが、大量のデータを渡すこともあります。メモリの問題はMPIによって作成された内部バッファの結果でしょうか?このような驚きのメモリの問題を防ぐにはどうすればいいですか?シミュレーション中にこの内部バッファが大きくなることはありますか?

私はValgrindを見てきましたが、迷惑なMPIの警告の他に、私は他のメモリの問題も見ていません。

答えて

0

詳細を知らなくても、MPIに障害があるかどうかは分かりません。メモリが割り当てられている場所を知るために、大規模なツール(valgrindツールの1つ)を試すことができます。

リソースリークが発生しないように注意してください。新しいMPIリソース(コミュニケータ、グループ、要求など)を作成する場合は、それらを適切に解放してください。

一般的に、特に大規模な場合、全対全通信に必要なバッファサイズに注意してください。可能であればMPI_IN_PLACEを使用するか、1つの大きなブロックではなく小さなチャンクでデータを送信してください。

+0

メモリの問題をMPI_AlltoallとMPI_Alltoallvを実行するサブルーチンに絞りました。また、1つのノード(16プロセッサ)を使用してもメモリの問題は発生しませんが、2つ以上のノードを使用するとメモリの問題は明らかです。どのようにこれが可能であるか考えていますか?私にとっては、この問題はおそらく私のコーディングの欠陥ではないようですが、私は間違っていました。 – Higgy