我今天遇到了这个
MPI_ERR_COUNT 无效的计数参数。计数参数必须是非负数;零计数通常是有效的。
零计数通常有效是什么意思?这是否意味着它依赖于实现?
我觉得你读得太多了。我认为这只是意味着根据用户实现,从 0 开始的任何随机正整数都是有效计数。不难想象一个不需要参数的消息标签。
如果消息标签不需要参数,那么只发送零是有效的(实际上,发送更多可能是无效的)。您必须记住,没有参数与没有数据不同,因为消息标签本身就是一个“参数”。
这意味着 MPI 中任何需要指定消息数据大小的函数都接受零,但这并不意味着它会导致正确的应用程序代码。
例如,MPI_Send
接受 0 作为计数,并且将始终发送一个空消息,该消息不携带任何数据但仍有一个信封,并且可以被任何匹配的 接收MPI_Recv
。另一方面,如果您指定 0 作为计数,MPI_Recv
您将收到任何已到达的匹配非空消息的消息截断错误。也就是说,0 几乎从来都不是一个有效的(从应用程序的角度来看)计数值,MPI_Recv
尽管它对于 MPI 来说是完全可以接受的。
零在 MPI 中被广泛接受,因为这样可以编写更对称的代码(例如,没有大量if (count != 0) ...