2012-05-01 41 views

回答

9

我认为你读太多了进去。我认为它只是意味着取决于用户执行,任何从0随机正整数是一个有效的计数。不难想象不需要参数的消息标签。

如果消息标签不需要参数,那么它是有效的只发送零(和,事实上,可能是无效的发送不止于此)。你必须记住,没有参数与没有数据是不一样的,因为消息标签是其中的一个“参数”。

+0

1代码。总之,即使没有有效载荷时,这一事实本身是接收到的消息可以是足够的信息,例如表示已经达到某个执行点 – suszterpatt

+0

但为什么不说零计数总是有效?(我同意没有有效载荷的消息是有用的) – mgilson

+2

你是对的零始终是有效的我已经看过标准(MPI 2.2标准的第3.2.2节) – mgilson

5

这意味着,在该MPI需要将指定的消息数据大小的任何函数接受零但是,这并不意味着它会导致正确的应用程序代码。

例如,MPI_Send接受0作为计数,并将始终发送一个空消息,该消息不包含任何数据但仍具有信封并且可以通过匹配MPI_Recv接收。在另一方面,如果你作为计数在MPI_Recv,你会得到一个消息,截断误差为已到达任何匹配的非空消息指定为0。即0对于MPI_Recv几乎从来都不是有效的(从应用角度来看)计数值,尽管MPI完全可以接受。

零被广泛接受,在MPI,因为这使得能够更写对称码(例如,没有大量的if (count != 0) ...

+0

我不知道,我懂'symmetric'码的说法。有时从邮件信封中的信息是所有你需要(以syncrhonize例如两个过程)。 – mgilson

+1

对称意味着代码中没有'if'-s,因此它更易于阅读和理解。另一个例子是使用'MPI_PROC_NULL'来防止非周期性笛卡尔拓扑中的边界处理中的秩特定逻辑,例如, “如果我不是最高等级,则发送消息给等级+1”或“如果我不是等级0,则接收等级为1的消息”。 –