MPI 零计数数据交换

MPI zero count data exchange

我有一些关于交换零计数数据的问题(例如,MPI_Send 和 MPI_Recv),我在 MPI 文档中找不到答案:

1) 据我了解,计数等于 0 是合法的(根据 MPI 标准)。还是实现已定义?

1a) 在像 MPI_Gatherv 这样的函数中,某些计数可以为零吗?

2) 如果count为零,buffer是否仍然必须是一个有效的指针?或者可以NULL/uninitialized?

3) 即使计数为 0,网络上仍有一些通信,即一些 header/meta 数据仍在通信。我说的对吗?

1) 计数为零是合法的。

1a) 在 MPI_Gatherv()(以及 MPI_Scatterv(),MPI_Alltoallv()` 和朋友)中让一些计数为零是合法的

2) 如果计数为零,标准不强制指针有效

3) 零消息大小是一条消息,作为直接结果,交换了一些元数据。 MPI_Recv(..., count=0, ...) 仅 returns 在收到(并因此发送)零大小的消息之后,如果没有发送数据则不会发生这种情况。