【问题标题】:Asynchronous MPI异步 MPI
【发布时间】:2019-09-22 00:07:01
【问题描述】:

我想从处理器 (a) 向 (b) 发送 MPI 消息,但是,何时发生取决于处理器 b。

让我解释一下我的情况。想象一下,我有两个不同的代码运行不同的时间循环。在每个案例的一个时间步之后,我需要双向交换某些数据。另外,我知道,例如与处理器 (a) 关联的代码比另一个 (b) 运行得更快。因此,我想利用这一事实,例如让处理器 (a) 使用与以前相同的数据运行相同的时间循环(为我提供更好的统计数据)。但我需要控制它,因为当且仅当处理器 (b) 尚未完成并更新处理器 (a) 需要及时推进的数据时,我需要处理器 (a) 运行重复的时间循环。

在时间循环完成后,我目前正在处理器 (a) 中使用 MPI_IPROBE,以检查数据是否准备好。虽然,我发现即使来自处理器 (b) 的数据准备就绪,MPI_IPROBE 仍然可以给出错误标志。

我从以下文章中了解到,由于该库例程的 MPI 定义,这种情况并不少见。
Why does MPI_Iprobe return false when message has definitely been sent?

到目前为止我做了什么

所以在接收程序中,我确实调用了 mpi_iprobe 10 次

 do i = 1, 10 
     call mpi_iprobe( dest, tag, comm_world, updated, status_, mpierr  ) 
     if(updated)exit
  enddo 

  if(updated) call mpi_recv(buf, size_buf, mpi_real, src, tag, comm_world, status, mpierr)

在我发送数据的地方,我有以下内容

    if(updated)then 
       call mpi_wait( req, status, mpierr) ! this corresponds to the mpi_isend from last time step
       call mpi_isend(buf, size_buf, src, tag, req, comm_world, mpierr)
    else 

       call mpi_request_free(req, mpierr) ! deletes the isend I had  last time
       call mpi_send(buf, size_buf, src, tag, req, comm_world, mpierr) ! the new send
     endif

所以我的想法是释放最后一个 isend 并创建一个新的,以防在完成新迭代之前没有收到它。 似乎我的 mpi_request_free 正在做一些意想不到的事情。在我运行代码一段时间后,假设我的处理器 a 在每个处理器 b 的一次迭代中进行 10 次迭代,在某个时候它突然下降到 1 比 1 的迭代。这不是预期的 - 我希望 mpi_request_free 没有做对

【问题讨论】:

    标签: fortran mpi


    【解决方案1】:

    不是直接的,但您可以在 (b) 上的 MPI_Recv 之前从进程 (b) 向进程 (a) 发送 MPI_Isend,并在 (a) 上使用 MPI_Iprobe 或类似方法来检测

    【讨论】:

    • 这就是我正在做的事情,问题是 MPI_IPROBE 并不总是返回为真,即使消息已发送。我需要在 mpi_iprobe 上循环一些迭代以使确定我没有错过实际更新?
    • 严格来说,您可以检查的是 (a) 处有一条从 (b) 发送的消息可以接收。这与 (b) 发送了一条消息并不完全相同,但如果差异困扰您,我怀疑您正在做一些相当奇怪的事情。您为什么不编辑您的问题以告诉我们您真正想要做什么,可能有比您在此处提出的更好的方法。
    • 我已经解释了我想要做什么。谢谢
    • 我尝试使用 mpi_request_free 删除之前的 isend,以防没有收到并重新创建一个 isend。虽然,这似乎不太可靠。你知道使用这样的库例程是否有问题。我已经更新了我的问题。非常感谢
    猜你喜欢
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2012-05-24
    • 2011-04-17
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多