【问题标题】:RMA MPI window access latencyRMA MPI 窗口访问延迟
【发布时间】: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 执行操作就像其他进程一样,因此它不可能连续锁定和解锁窗口。此外,在我看来,这似乎相当浪费。

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

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

【问题讨论】:

标签: fortran mpi latency


【解决方案1】:

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

【讨论】:

  • 这对我有用。您是否有参考说明MPI_Something 执行异步进程?我想阅读更多有关它的信息。不,谢谢,因为这是不允许的。
猜你喜欢
  • 2021-09-29
  • 2016-09-11
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
相关资源
最近更新 更多