私は、Fortranで書かれた流体の流れと熱伝達の解析プログラムを最適化するために取り組んでいます。私が大規模かつ大規模なメッシュシミュレーションを実行しようとすると、私はメモリ制限の問題に遭遇しています。しかし、メッシュはそれほど大きなものではありません。典型的なCFDコードを実行するには、わずか50万のセルと小さなピーナッツが必要です。私の問題で80 GBのメモリを要求しても、仮想メモリが不十分でクラッシュしています。Fortranアレイのメモリ管理
私は、どのような配列がそのすべてのメモリを突き詰めているのか、いくつか推測しています。特に(28801,345600)に割り当てられています。私の計算で間違っている場合は私を修正しますが、倍精度配列は値ごとに8ビットです。したがって、この配列のサイズは28801 * 345600 * 8 = 79.6 GBになりますか?
ここで、この配列の大半は計算中にゼロになるので、格納する必要はありません。私は、はるかに小さな配列で作業するためにゼロ以外の値を格納するだけのソリューションアルゴリズムを変更することができると思います。しかし、私はサイズを縮小するために正しい配列を探していることを確認したい。最初に、上記の配列サイズを正しく計算しましたか?第二に、実行時にFortranの配列サイズをMBまたはGBで表示させる方法がありますか?最もメモリを消費する配列を印刷するだけでなく、実行時にコードのメモリ要件がどのように変化しているかを確認することに興味があります。
これを実行しているマシンで実際にどのくらいのメモリがありますか?また、あなたの仮定で間違っている* double *精度は8ビットではなく、8ビットです。それはおよそ74.16 GBのデータ(1000ではなく1024の累乗)になります。また、私はあなたが4日分のデータ(345600秒= 60 * 60 * 24 * 4)をやっていると仮定して正しいですか? –
Mike、これはノードごとに最大96 GBのメモリを持つクラスタ上で実行されています要求。バイト対ビットの混乱とそれをクリアするためのおかげで申し訳ありませんが、私は右の野球場にあるので、配列のサイズは間違いなく問題です。 345600はモデルメッシュ内のセル数に関連し、時間とは関係ありません。 – rks171
@ user104629:なぜ80GBのメモリの連続した配列を割り当てることができないのかという理由の1つです。 –