Fortran 错误:无法分配内存

Fortran 错误:无法分配内存

我在并行化代码时遇到了一些问题。该代码是用 Fortran90 编写的,我使用 mpi 对其进行了并行化。我不会发布该代码,因为它有超过 1 万行。

然而,在尝试处理更精细的网格时,我开始遇到此错误:

Operating system error: Cannot allocate memory
Allocation would exceed memory limit
-------------------------------------------------------
Primary job  terminated normally, but 1 process returned
a non-zero exit code.. Per user-direction, the job has been aborted.
-------------------------------------------------------
--------------------------------------------------------------------------
mpiexec detected that one or more processes exited with non-zero status, thus causing
the job to be terminated. The first process to do so was:
  Process name: [[28926,1],0]
  Exit code:    1*

我有 16GB 的 RAM,我认为我超出了 4GB,但不是很多,但看起来好像限制在 4GB 左右。应该有足够的空间。我以前在 FORTRAN77 中遇到过类似的问题(我最初在 F77 中编写代码,然后将其传递给 Fortran90)。我以前使用标志来解决这个问题-mcmodel=large。但是,现在不起作用了。

此外,有些事情很奇怪,因为如果我只为给定的网格运行一个进程,它将在内存分配上给出此错误。但是如果我在 8 个进程中运行它,则不会发生错误。似乎限制会随着进程数而“移动”。当我运行更多进程时,每个进程中的数组都会变小,但分配的内存总量应该比只有一个进程时更大。

在这里你可以看到我的终端、错误和代码运行时的顶部

知道可能发生什么事吗?

答案1

谢谢你们。我找到了分配大量内存的原因。一切都正确,我只是忘了我正在分配一个巨大的数组,我需要在其他版本的代码中做其他事情。

谢谢。

相关内容