Memory management 内存不足错误。如何定位?如何解决?

Memory management 内存不足错误。如何定位?如何解决?,memory-management,fortran,Memory Management,Fortran,我试图在Cray上运行Fortran代码。它在gnu或intel下编译时工作良好。当我试图以Cray Fortran编译的方式运行它时,它会因为一个“OOM killer”错误而死掉。我不知道代码中的错误是从哪里来的。我不知道为什么Cray编译器会有问题,而其他编译器没有。最重要的是,我尝试过各种编译器开关和(取消)激活“巨大页面”,但都没有用。如何定位此错误?更好的是,我该如何解决它呢?如果有人感兴趣,我接受了Vladimir F的建议,开始禁用部分代码以查找问题。我很幸运,没花那么长时间。代

我试图在Cray上运行Fortran代码。它在gnu或intel下编译时工作良好。当我试图以Cray Fortran编译的方式运行它时,它会因为一个“OOM killer”错误而死掉。我不知道代码中的错误是从哪里来的。我不知道为什么Cray编译器会有问题,而其他编译器没有。最重要的是,我尝试过各种编译器开关和(取消)激活“巨大页面”,但都没有用。如何定位此错误?更好的是,我该如何解决它呢?

如果有人感兴趣,我接受了Vladimir F的建议,开始禁用部分代码以查找问题。我很幸运,没花那么长时间。代码中有一部分是我在循环中处理的可分配整数数组。目前尚不清楚运行时阵列的大小。所以我给它们分配了一些大小,然后随着循环的迭代,如果它们超出了它们的边界,我会重新分配它们,以一定的增量增加大小,在我的默认情况下是100。我不知道Cray编译器是如何工作的,但这导致了太多的重新分配,它无法处理,并且它将该错误报告为内存不足错误。我将增量增加到500个整数,这就解决了问题。如果有人想弄清楚到底发生了什么,我将非常高兴听到这一消息。

我担心答案是通过启用和禁用代码的各个部分的可能的艰苦工作来取得成功。这可能需要很长时间。首先,这是FORTRAN(如77所示)还是FORTRAN(如众所周知的FortrAda)?这将确定故障是否是动态内存造成的。还有,编译器的唯一区别是什么?你在同一个系统上运行这个?@user3344003这是Fortran 90(或更高版本),我在同一个系统上运行。只更改了编译器。谢谢。它一开始就死了吗?@user3344003不。需要一段时间。我现在正试图找出确切的位置。你可以检查这些数组的地址,分配器是在重复使用释放的内存还是总是要求一个新的块。您当然可以向您的集群支持人员或当地的Cray代表报告这一情况。可能是Fortran运行时库导致了问题。对堆进行分段,使其无法重新分配。通过乘以某个因子(例如,1.5或2.0)来增加数组的大小,而不是增加一个恒定的长度(100或500),这不是更好吗?如果最终大小非常大,则后一种方法需要更多的重新分配。