我可以使用MPI_Probe来探测集合操作发送的消息吗?

时间:2012-03-22 11:27:14

标签: parallel-processing mpi

在我的代码中,我有一个服务器进程反复探测传入消息,它有两种类型。 每个进程将发送一次这两种类型,以向服务器进程提供有关它的提示 终止。

我想知道使用MPI_Broadcast广播这些终止消息并使用MPI_Probe来探测他们的到达是否有效。

我尝试使用此组合,但失败了。这种失败可能是由其他一些事情引起的。所以我希望有人知道这一点。

2 个答案:

答案 0 :(得分:5)

不,您只能使用MPI_Probe来测试点对点通信。对于集体沟通来说,参与的唯一方式就是积极地进行集体呼吁。根据{{​​3}}的定义,“该调用与在程序中同一点执行的MPI_RECV(...,源,标记,通信,状态)调用所接收的相同消息相匹配” - - 例如,它只匹配像Recv那样的点对点的东西。

随着新的非阻塞集体进入MPI3,您可以使用MPI_Test(或MPI_Wait)来检查非阻塞请求的状态,就像使用非阻塞发送/接收一样,尽管我没有'我一直认为工作组的工作太紧密,所以我不知道细节。

答案 1 :(得分:1)

我不确定MPI标准是否排除了这一点,但我不知道如果有可能它会如何有用。在我使用mpi_probe的(罕见)场合,我用它来查找传入消息的大小;当然,它也可以获得有关“飞行中”消息的其他信息。但mpi_bcast是一个集体操作,因此通信器中的所有进程都知道您可以使用mpi_probe查找的消息的所有内容。我想?