【问题标题】:simultaneous send and receive using MPI使用 MPI 同时发送和接收
【发布时间】:2013-01-28 16:02:18
【问题描述】:

我有一个网络,其中进程向其邻居发送随机消息并同时从其邻居接收消息。 我可以使用套接字和线程来做到这一点。一个线程接收消息,另一个线程向随机选择的邻居发送消息。是否可以使用 MPI_SEND 和 MPI_RECV 来实现这一点?

【问题讨论】:

  • 你的意思是发送和接收的非阻塞版本?
  • 没关系。其实,我不太理解你的问题,无法回答。
  • 我尝试使用它,但我需要将发送放在一个循环中,该循环以随机的时间间隔发送消息。在此循环执行期间,排名应该收到发送给它的任何消息

标签: c mpi hpc


【解决方案1】:

您可以在多线程环境中使用 MPI 调用。查看MPI_Init_thread 函数的手册和这篇论文:http://www.mcs.anl.gov/~thakur/papers/mpi-threads.pdf。请注意,MPI-1 标准并不要求实现是线程安全的,只有 MPI-2 需要(但您使用的实现很可能是 MPI-2)。

【讨论】:

  • 谢谢。多线程是唯一的选择还是理论上可以使用非阻塞发送和接收来实现?
  • 如果不详细了解您的代码在做什么,就很难说,也就是说,也许可以以某种方式重新排列您的算法,然后使用非阻塞调用。另一方面,我过去也遇到过非常相似的问题——我在做并行排序,需要同时发送和接收消息;我发现的唯一解决方案是使用两个线程和套接字(当时 MPI-2 还不存在,我可用的所有 MPI-1 实现都不是线程安全的)。
【解决方案2】:

您对“同时”的定义是什么?

无论如何,你可能对MPI_Sendrecv感兴趣:

发送-接收操作的语义是如果调用者分叉两个并发线程,一个执行发送,一个执行接收,然后将这两个线程连接起来。

【讨论】:

  • 谢谢。假设我有 3 个等级,每个等级需要向其他等级发送 2 条消息。例如,Rank1 向 Rank0 发送 2 条消息,向 Rank1 发送 2 条消息。每个等级总共发送 4 条消息。但是每次发送之间的时间间隔是随机的。而且我不想在每个 sendrecv 之间放置一个同步块。
猜你喜欢
  • 2013-04-15
  • 2018-03-12
  • 2013-12-20
  • 2016-06-15
  • 2012-03-13
  • 2011-07-04
  • 2016-10-03
  • 2011-06-30
  • 1970-01-01
相关资源
最近更新 更多