【发布时间】:2017-06-30 06:33:29
【问题描述】:
我正在处理一个带有 MPI 并行化的 Fortran 代码,在该代码中我的内存不足,无法进行密集运行。我很小心地分配了模拟开始时所需的几乎所有内存。子程序静态内存分配通常很小,但如果我因为这些子程序而耗尽内存,它会在模拟的早期发生,因为内存分配不应该随着时间的推移而增长。我的问题是,在模拟过程中,我遇到了内存错误,例如:
Insufficient memory to allocate Fortran RTL message buffer, message #174 = hex 000000ae.
我唯一能想到的是,我的 MPI 调用正在使用我无法在模拟开始时预先分配的内存。在模拟运行时,我主要使用 MPI_Allreduce、MPI_Alltoall 和 MPI_Alltoallv,有时我会传递大量数据。内存问题可能是由 MPI 创建的内部缓冲区造成的吗?如何防止这样的意外内存问题?这个内部缓冲区可以在模拟期间增长吗?
我查看了 Valgrind,除了烦人的 MPI 警告之外,我没有看到任何其他内存问题。
【问题讨论】: