MPI内部缓冲存储器问题

时间:2017-02-12 04:48:35

标签: memory mpi openmpi

我正在处理带有MPI并行化的Fortran代码,其中我的内存不足以进行密集运行。我小心分配模拟开始时所需的几乎所有内存。子程序静态内存分配通常很小,但如果由于这些子程序而导致内存不足,则会在模拟的早期发生,因为内存分配不应随着时间的推移而增长。我的问题是,在模拟过程中,我遇到了内存错误,例如:

Insufficient memory to allocate Fortran RTL message buffer, message #174 = hex 000000ae.

我唯一能想到的是我的MPI调用正在使用我无法在模拟开始时预分配的内存。我在模拟运行时主要使用MPI_Allreduce,MPI_Alltoall和MPI_Alltoallv,有时我传递大量数据。内存问题可能是MPI创建的内部缓冲区的结果吗?如何防止这样的意外内存问题?这个内部缓冲区可以在模拟过程中增长吗?

我看过Valgrind,除了恼人的MPI警告外,我还没有看到任何其他内存问题。

1 个答案:

答案 0 :(得分:0)

在不知道更多细节的情况下,有点难以判断MPI是否有问题。您可以尝试使用massif(valgrind工具之一)来查找内存的分配位置。

确保不引入任何资源泄漏:如果您创建新的MPI资源(通信器,组,请求等),请确保正确释放它们。

通常,请注意所有通信所需的缓冲区大小,尤其是大规模通信。如果可能,请使用MPI_IN_PLACE,或者以小块而不是单个大块发送数据。