我有一些有关交换零计数数据的问题(例如,通过MPI_Send和MPI_Recv),对于在MPI文档中找不到答案,我遇到了麻烦:
1)据我了解,按照MPI标准,计数等于0是合法的。还是实现定义了?
1a)在MPI_Gatherv
之类的函数中,某些计数可以为零吗?
2)如果count为零,缓冲区是否仍必须是有效的指针?还是可以NULL
/未初始化?
3)即使count为0,网络上仍存在一些通信,即某些头/元数据仍在通信。我说的对吗?
答案 0 :(得分:1)
1)计数等于零是合法的。
1a)在MPI_Gatherv()
(和MPI_Scatterv(),
MPI_Alltoallv()和朋友中)将一些计数设为零是合法的
2)如果计数为零,则标准不强制指针有效
3)消息大小为零是一条消息,直接的结果是交换了一些元数据。 MPI_Recv(..., count=0, ...)
仅在接收到零大小的消息(并因此将其发送)之后返回,并且如果没有发送数据则不会发生。