【问题标题】:MPI_Recv: Receiving a different size than the one SentMPI_Recv:接收的大小与发送的大小不同
【发布时间】:2011-06-15 19:03:29
【问题描述】:

我正在编写一个程序来使用MPI 库检查最短路径。 有两种情况:
要么我找到了更好的路径,以防缓冲区的第一个插槽显示resultBuff[0] = 1,我需要检查缓冲区的其余内容以获得更好的路径。
另一种情况是resultBuff[0] = 0,我不会期望缓冲区的其他单元格中有任何值。

我可以使用单独的MPI_Isend 调用吗:

如果我找到更好的路径并将其存储在resultBuff[1]resultBuff[10]

MPI_Isend((void*)sendBuff, 11, MPI_INT, 0, 1, MPI_COMM_WORLD, &request);

如果没有找到更好的路径:

MPI_Isend((void*)sendBuff, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &request);

在这两种情况下我都会使用

MPI_Recv( (void*)resultBuff, 11, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status);

接收结果。

这行得通吗?
如果是这样,如果不发送更好的路径,我会节省通信成本吗?

注意:resultBuff 的大小为 11。

【问题讨论】:

    标签: c mpi


    【解决方案1】:

    是的,您可以这样做。从 MPI 标准和 MPI_Recv 的 man pages 来看,“count 参数表示消息的最大长度;实际数字可以用 MPI_Get_count 确定”,您使用从 MPI_Recv() 返回的 status 对象调用它.

    至于节省通信成本,可能不会——这样的短消息主要由发送消息的延迟而不是带宽决定。

    【讨论】:

      【解决方案2】:

      您无需发送消息说“我什么都没找到”:消息的缺少也可以传达该信息。接收者可以定期调用MPI_Test,并检查状态对象以查看是否收到了新消息。

      【讨论】:

      • 这并没有回答问题,它只是绕过它。
      • 我还需要知道路径计算何时结束。我需要发送一条消息说“我完成了”,只有这样我才能知道它是否找到了更好的路径。
      猜你喜欢
      • 1970-01-01
      • 2011-07-17
      • 2012-04-21
      • 2018-08-25
      • 2015-12-22
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多