RMA MPI窗口访问延迟

时间:2016-08-19 10:41:33

标签: fortran mpi latency

我使用Fortran(使用gfortran)和MPI 2(OpenMPI)。通过MPI_Win_lockMPI_Win_unlock以及putget操作(在非重叠的内存区域中),所有进程都会更新主进程上的变量,该变量通过窗口。

在测试用例中,我注意到,在主服务器完成某项任务之前,非主服务器的解锁操作不会返回,在这种情况下会休眠几秒钟。

如果不是让主人睡觉,我会使用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与其他进程一样执行操作,因此它不可能连续锁定和解锁窗口。而且,在我看来相当浪费。

我的问题是如何减少这种延迟?

我是否真的需要为主人提供锁和解锁代码?还是有其他解决方案吗?这个编译器/实现依赖吗?

1 个答案:

答案 0 :(得分:2)

该行为取决于实现。大多数MPI库不执行操作的异步进程,只有在通过调用MPI_Something将执行控制显式转移到库时才会发生进展。相对轻量级和可移植的hack是定期调用MPI_Iprobe,这应该使库能够处理用于实现RMA的任何未完成的非阻塞发送和接收操作。