接收计数是否始终与 MPI 消息的发送计数匹配?

Does received count always match send count for MPI message?

当您在一个进程中发送一个由某些 MPI_typen 元素组成的 MPI 消息,然后在另一个进程中接收时接收 count> n 是吗?保证始终收到所有 n 个元素?

本质上,如果您通过阻塞模式 MPI_Send 发送一条消息,然后通过具有足够大接收缓冲区的阻塞模式 MPI_Recv 接收它,您能保证收到整条消息吗?

或者您是否有可能只获得第一个 k < n 个元素并且应该重复调用 MPI_Recv 直到您获得全部内容。

我很确定答案是肯定的,但是查看官方 documentation and specification notes 我找不到肯定的答案。

正如 Gilles 和 David 在评论中所说,答案是肯定的。正如 Gilles 所说,您永远不会收到截断的消息。如果 n > count 则 MPI 将报告错误并失败。

如果 n <= countreceive 将完成,但通常您不知道 n 的值是多少(传入消息的大小)。您需要通过调用 MPI_Get_count().

从状态变量中提取它