【发布时间】:2012-05-11 07:19:44
【问题描述】:
【问题讨论】:
【问题讨论】:
我认为你读得太多了。我认为这只是意味着根据 user 实现,从 0 开始的任何随机正整数都是有效计数。不难想象一个不需要参数的消息标签。
如果消息标签不需要参数,那么只发送零是有效的(事实上,发送更多可能是无效的)。您必须记住,没有参数与没有数据不同,因为消息标签本身就是一个“参数”。
【讨论】:
这意味着 MPI 中任何需要指定消息数据大小的函数都接受零,但这并不意味着它会导致正确的应用程序代码。
例如,MPI_Send 接受 0 作为计数,并且将始终发送一个空消息,该消息不携带任何数据但仍然有一个信封,并且可以被任何匹配的 MPI_Recv 接收。另一方面,如果您将 0 指定为 MPI_Recv 中的计数,您将收到任何已到达的匹配非空消息的消息截断错误。也就是说,0 几乎从来都不是 MPI_Recv 的有效计数值(从应用程序的角度来看),尽管它对于 MPI 来说是完全可以接受的。
零在 MPI 中被广泛接受,因为这样可以编写更对称的代码(例如,没有大量 if (count != 0) ... 的代码
【讨论】:
symmetric 代码参数...有时您只需要来自消息信封的信息(例如同步两个进程)。
if-s,因此更易于阅读和理解。另一个例子是使用MPI_PROC_NULL 来防止非周期性笛卡尔拓扑中边界过程中的等级特定逻辑,例如“如果我不是最高级别,则发送消息到 rank+1”或“如果我不是 0 级,则接收来自 rank-1 的消息”。