OpenMXの実行時、使用メモリは必要に応じて動的に割り当てられています。 動的メモリー割り当て(dynamic memory allocation)では、メモリリークが発生する場合があり、 MDステップの増大とともに使用メモリが浪費され、最終的には異常終了する可能性が生じます。
OpenMXを次のように実行することで、メモリリークをチェックすることが可能です。
逐次計算
% ./openmx -mltest
並列計算
% ./openmx -mltest "mpirun -np 4 openmx"
ディレクトリ「work/ml_example」に保存されている14個のテスト用入力ファイルを用いて、
メモリリークが監視されます。この際に、プログラムコード「openmx」中の同じモニターポイントで
実際に使用されたVSZおよびRSSを監視します。計算終了後、ファイル「mltest.result」が生成します。
監視されたVSZとRSSはMDステップの関数として、ファイル「mltest.result」中に次のように
出力されますので、メモリリークが生じているのかどうか確認できます。
1 ml_example/DIA8.dat
CPU (%) VSZ (kbyte) RSS (kbyte)
MD_iter= 1 68.300 397396 123076
MD_iter= 2 96.400 436264 131916
MD_iter= 3 99.000 436264 131916
MD_iter= 4 97.900 436264 131916
MD_iter= 5 98.800 436264 131916
MD_iter= 6 99.300 436264 131916
MD_iter= 7 98.800 436264 131916
MD_iter= 8 99.200 436264 131916
MD_iter= 9 99.500 436264 131916
MD_iter= 10 99.100 436264 131916
MD_iter= 11 99.400 436264 131916
MD_iter= 12 99.500 436264 131916
MD_iter= 13 99.300 436260 131916
MD_iter= 14 99.500 436264 131916
MD_iter= 15 99.300 436264 131916
MD_iter= 16 99.500 436260 131916
MD_iter= 17 99.600 436264 131916
MD_iter= 18 99.400 436264 131916
MD_iter= 19 99.600 436264 133848
MD_iter= 20 99.400 436264 133848
MD_iter= 21 99.500 436264 133848
MD_iter= 22 99.600 436264 133848
MD_iter= 23 99.500 436264 133848
MD_iter= 24 99.500 436264 133848
MD_iter= 25 99.700 436264 133848
MD_iter= 26 99.500 436264 133848
MD_iter= 27 99.600 436264 133848
MD_iter= 28 99.500 436264 133848
MD_iter= 29 99.600 436264 133848
MD_iter= 30 99.600 436264 133848
2 ml_example/DIA8_DC.dat
CPU (%) VSZ (kbyte) RSS (kbyte)
MD_iter= 1 101.000 412508 136448
MD_iter= 2 100.000 516940 210312
MD_iter= 3 98.200 517016 210440
MD_iter= 4 98.900 517016 210440
MD_iter= 5 99.300 517016 210440
MD_iter= 6 99.500 517016 210440
......
....