【问题标题】:how to handle a situation in mpi where the number of messages to receive is unknown如何处理 mpi 中要接收的消息数量未知的情况
【发布时间】:2011-08-16 04:34:32
【问题描述】:

我有一个 MPI 程序,其中每个节点将一些值发送到其他一些节点。发送者知道要发送数据的节点,但接收者不知道 1)最终预计有多少数据以及 2)哪些队伍将发送给它。

我可以将 MPI_ANY_SOURCE 用于上述问题的第二部分,但我不知道接收器如何知道它必须接收多少。即我应该在接收节点的 MPI 中调用接收函数多少次。

【问题讨论】:

  • 我认为使用 MPI_Put 可以帮助我解决我的问题,因为这样我就不必担心接收部分..!!有没有cmets?

标签: mpi


【解决方案1】:

MPI2 中单向通信的最大优势在于您不需要协调发送与接收,因此这绝对是一种方法。另一方面,在为其他人创建 MPI_Put 的窗口时,您仍然需要知道您可能会收到多少数据。所以这可能是个问题。

但也可以协调点对点消息。由于听起来所有发件人都知道他们将发送多少条消息以及发送给谁,因此您可以组合所有这些信息。例如,假设有 4 个处理器,进程 1 必须向进程 0 和 2 中的每个进程发送一条消息。它可以有一个整数数组 toSend:

toSend[] = {1,0,1,0}

其他处理器也可以。然后你可以对这些数组做一个MPI_Allreduce(...., MPI_SUM,...),现在每个处理器都会知道要接收的消息总数;然后他们可以从MPI_ANY_SOURCE 发布许多非阻塞接收。

如果每条消息的数据量也不知道,那就有点棘手了;但是你可以对数据量做同样的事情;创造适当的缓冲空间;然后你可以做MPI_Bsend()s,接收者可以做 MPI_Probes 和 MPI_Recv's。

【讨论】:

  • 对于我的问题,数据量是有限制的,所以单方面的沟通对我来说已经足够了。我会继续执行它。顺便说一句,第二种方法听起来也不错,如果有任何问题,我会改用它。感谢乔纳森的帮助.. :)
猜你喜欢
  • 2023-04-07
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
相关资源
最近更新 更多