接收计数是否始终与 MPI 消息的发送计数匹配?
Does received count always match send count for MPI message?
当您在一个进程中发送一个由某些 MPI_type
的 n
元素组成的 MPI 消息,然后在另一个进程中接收时接收 count
为 > n
是吗?保证始终收到所有 n
个元素?
本质上,如果您通过阻塞模式 MPI_Send
发送一条消息,然后通过具有足够大接收缓冲区的阻塞模式 MPI_Recv
接收它,您能保证收到整条消息吗?
或者您是否有可能只获得第一个 k < n
个元素并且应该重复调用 MPI_Recv
直到您获得全部内容。
我很确定答案是肯定的,但是查看官方 documentation and specification notes 我找不到肯定的答案。
正如 Gilles 和 David 在评论中所说,答案是肯定的。正如 Gilles 所说,您永远不会收到截断的消息。如果 n > count
则 MPI 将报告错误并失败。
如果 n <= count
则 receive
将完成,但通常您不知道 n
的值是多少(传入消息的大小)。您需要通过调用 MPI_Get_count()
.
从状态变量中提取它
当您在一个进程中发送一个由某些 MPI_type
的 n
元素组成的 MPI 消息,然后在另一个进程中接收时接收 count
为 > n
是吗?保证始终收到所有 n
个元素?
本质上,如果您通过阻塞模式 MPI_Send
发送一条消息,然后通过具有足够大接收缓冲区的阻塞模式 MPI_Recv
接收它,您能保证收到整条消息吗?
或者您是否有可能只获得第一个 k < n
个元素并且应该重复调用 MPI_Recv
直到您获得全部内容。
我很确定答案是肯定的,但是查看官方 documentation and specification notes 我找不到肯定的答案。
正如 Gilles 和 David 在评论中所说,答案是肯定的。正如 Gilles 所说,您永远不会收到截断的消息。如果 n > count
则 MPI 将报告错误并失败。
如果 n <= count
则 receive
将完成,但通常您不知道 n
的值是多少(传入消息的大小)。您需要通过调用 MPI_Get_count()
.