【发布时间】:2016-08-19 19:55:22
【问题描述】:
我使用 Fortran(带有 gfortran)和 MPI 2 (OpenMPI)。通过MPI_Win_lock 和MPI_Win_unlock 以及put 和get 操作(在内存的非重叠区域中),所有进程都会更新我的主进程上的一个变量,该变量通过一个窗口公开。
然而,在一个测试用例中,我注意到非主进程的解锁操作在主进程完成某些任务之前不会返回,在这种情况下会休眠几秒钟。
如果我不是让主人睡觉,而是使用while循环和计时器让它等待几秒钟,同时我让主人锁定和解锁窗口,一切都会更快:
call start_time(time_left)
do while (time_left .gt. 0)
call MPI_Win_lock(...)
call MPI_Win_unlock(...)
call update_time(time_left)
end do
但是,在我的真实代码中,master 执行操作就像其他进程一样,因此它不可能连续锁定和解锁窗口。此外,在我看来,这似乎相当浪费。
因此,我的问题是如何减少这种延迟?
我真的需要为我的代码添加锁和解锁吗?还是有其他解决方案?这个编译器/实现是否依赖?
【问题讨论】: