How can I find the cause for a memory leak in Fortran 2003 program?

倖福魔咒の 提交于 2019-12-04 19:45:21

As the first answer indicates, your question is very general and not so amendable to a specific answer. Are you using pointers? Pointers are less safe than allocatables --- switch to allocatables if they will do the job.

A suggestion for debugging options for ifort: -O2 -stand f03 -assume realloc_lhs -check all -traceback -warn all -fstack-protector -assume protect_parens -implicitnone

This is more of an extended comment than an answer ...

You have guessed that you have a memory leak, but you've not given us any information with which we can help you turn your guess into a diagnosis. In the absence of such information, some advice ...

a) memory leaks in Fortran programs occur in the same way they do in other programs: programmers forgetting (or neglecting) to deallocate variables when finished with; don't forget that with Fortran 2003 you can have allocatable scalars;

b) in long running scientific computations it's not unusual to find large arrays of outputs being built up iteratively, sometimes it's better to write these to disk during the computation than to wait until the end; you take a hit in I/O (well, mostly O) time but do economise on memory use;

c) there are a variety of tools available to help you spot memory leaks, including Intel Inspector and a variety of open-source programs;

d) you should understand quite well how the memory required by your program changes as it runs;

e) and sometimes, in this domain, the answer is just to buy more RAM.

I suppose you already got you answer from the compiler: insufficient memory. At some point of your program you are trying to allocate a large memory.

You can compile your program with " -O0 -debug -traceback -check -ftrapuv " flags and run it again. You might use the intel debugger to go over the program line by line (I mean where you think the problem might be). With some luck you won't need to use other tools like valgrind.

Sometime, compiling with Gfortran will also help. Please note you need to use different compiler options to check the array bounds.

One last tip would be about using the "associate" construct. I personally had many problems using it. If you use it, remove it from your code and check things again.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!