这个问题可能看起来有点开放,但是一段时间以来我一直困扰着我,所以我想我会在这里发帖,希望能够讨论或提出建议。
我是一名物理博士生,在一个相当复杂的fortran程序上运行相当大的计算。该程序涉及大量粒子(~1000),这些粒子通过局部电位相互作用,并根据过阻尼的langevin动力学移动。
最近该程序开始表现得非常奇怪。我不确定发生了什么变化,但是当使用相同的输入参数运行程序时,似乎发生了不同的事情。有时程序将运行完成。其他时候它会产生一个seg错误 - 在计算中的不同点。有时它似乎只是停止而没有产生任何错误,并且有几次导致我的计算机显示有关程序内存耗尽的警告。
让我感到困惑的是为什么程序对于相同的输入应该表现得不同。我真的只是希望得到关于这里可能会发生什么的建议。目前我唯一的想法是某种内存管理问题。我正在运行的计算机是2013 iMac,配备8GB内存,2.7GHz四核i5处理器和OSX Mavericks。不是世界上最强大的,但我很确定我在没有这些问题的情况下对它进行了更大的计算。
答案 0 :(得分:1)
seg故障表示程序内存不足或程序出错。 Fortran中导致seg错误的最常见错误是数组下标错误以及调用中的参数与过程(伪参数)之间的不一致。首先,打开编译器的运行时下标检查选项。对于第二个,将所有过程放入模块(或模块)并使用该模块(或模块)。这将使编译器能够检查参数的一致性。
您使用的是什么编译器?
更新:如果您正在使用gfortran,请尝试以下编译器选项:-O2 -fimplicit-none -Wall -Wline-truncation -Wcharacter-truncation -Wsurprising -Waliasing -Wimplicit-interface -Wunused -parameter -fwhole-file -fcheck=all -std=f2008 -pedantic -fbacktrace