MPI_Recv:接收的大小与发送的大小不同

时间:2011-01-26 11:19:16

标签: c mpi

我正在编写一个使用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。

2 个答案:

答案 0 :(得分:1)

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

至于节省通信成本,它可能不会 - 这种短消息主要是发送消息的延迟而不是带宽。

答案 1 :(得分:0)

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