2011-01-26 151 views
5

我正在编写一个程序来检查使用MPI库的最短路径。 有两种情况:
要么我找到了更好的路径,如果缓冲区的第一个插槽的状态为resultBuff[0] = 1,我需要检查缓冲区的其余内容以获得更好的路径。
另一种情况是resultBuff[0] = 0,我不会在缓冲区的其他单元中删除任何值。MPI_Recv:接收的尺寸不同于发送的尺寸

是否有可能对我来说,使用单独的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

回答

1

是的,你可以做到这一点。根据MPI标准和man pages(对于MPI_Recv),“count参数指示消息的最大长度;实际数量可以用MPI_Get_count”确定,您可以使用从MPI_Recv()返回的status对象调用该参数。对于节约通信成本,它可能不会 - 这样的短消息主要由发送消息的延迟而不是带宽来决定。

0

你并不需要发送一个消息说的:“我什么也没发现”:在缺乏消息可以传达的信息一样好。接收者可以定期调用MPI_Test,并检查状态对象以查看是否收到新消息。

+1

这并没有回答这个问题,它只是围绕它而已。 – Nayish 2011-01-26 11:58:39