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

hiz*_*zki 5 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);
Run Code Online (Sandbox Code Playgroud)

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

MPI_Isend((void*)sendBuff, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &request);
Run Code Online (Sandbox Code Playgroud)

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

MPI_Recv( (void*)resultBuff, 11, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status);
Run Code Online (Sandbox Code Playgroud)

收到结果.

这会有用吗?
如果是这样,如果不发送更好的路径,我会节省通信费用吗?

注意:resultBuff大小为11.

Jon*_*rsi 1

是的,你可以这样做。从 MPI 标准和MPI_Recv 的手册页来看,“count 参数指示消息的最大长度;实际数量可以通过MPI_Get_countstatus确定”,您可以使用从 MPI_Recv() 返回的对象调用它。

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