![Fortran 错误:无法分配内存](https://linux22.com/image/1168623/Fortran%20%E9%94%99%E8%AF%AF%EF%BC%9A%E6%97%A0%E6%B3%95%E5%88%86%E9%85%8D%E5%86%85%E5%AD%98.png)
我在并行化代码时遇到了一些问题。该代码是用 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
谢谢你们。我找到了分配大量内存的原因。一切都正确,我只是忘了我正在分配一个巨大的数组,我需要在其他版本的代码中做其他事情。
谢谢。