gpt4 book ai didi

memory-leaks - MPI_REDUCE 导致内存泄漏

转载 作者:行者123 更新时间:2023-12-04 05:08:06 27 4
gpt4 key购买 nike

我最近遇到了一个堰行为。如果我在我的机器上运行以下代码(使用最新版本的 cygwin,Open MPI 版本 1.8.6),我会得到一个线性增长的内存使用量,这很快就会淹没我的电脑。

program memoryTest

use mpi

implicit none

integer :: ierror,errorStatus ! error codes
integer :: my_rank ! rank of process
integer :: p ! number of processes
integer :: i,a,b

call MPI_Init(ierror)
call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierror)
call MPI_Comm_size(MPI_COMM_WORLD, p, ierror)

b=0
do i=1,10000000
a=1*my_rank
call MPI_REDUCE(a,b,1,MPI_INTEGER,MPI_MAX,0,MPI_COMM_WORLD,errorStatus)
end do

call MPI_Finalize(ierror)

stop
end program memoryTest

知道可能是什么问题吗?代码在我的初学者眼中看起来不错。编译行是
mpif90 -O2 -o memoryTest.exe memoryTest.f90

最佳答案

这已在相关主题 here 中讨论过。 .

问题是根进程需要从其他进程接收数据并执行归约,而其他进程只需要将数据发送给根进程。因此,根进程运行速度较慢,并且可能会被传入消息的数量所淹没。如果在 MPI_REDUCE 调用之后插入 MPI_BARRIER 调用,则代码应该可以正常运行。

MPI 规范的相关部分说:“ 集体操作可以(但不是必须)在调用者的
参与集体交流结束。
一次阻塞操作完成
一旦调用返回。非阻塞(立即)调用需要单独的完成
调用(参见节
3.7
)。集体操作完成表示调用者空闲
修改通讯缓冲区中的位置。它并不表示其他进程
组中已完成或什至开始操作(除非另有暗示)
操作说明)。 因此,集体通信操作可能会,也可能不会,
具有同步所有调用进程的效果。
该声明当然不包括
屏障操作。”

关于memory-leaks - MPI_REDUCE 导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33754220/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com