在我的代码中,我有一个服务器进程反复探测传入消息,它有两种类型。 每个进程将发送一次这两种类型,以向服务器进程提供有关它的提示 终止。
我想知道使用MPI_Broadcast广播这些终止消息并使用MPI_Probe来探测他们的到达是否有效。
我尝试使用此组合,但失败了。这种失败可能是由其他一些事情引起的。所以我希望有人知道这一点。
答案 0 :(得分:5)
不,您只能使用MPI_Probe来测试点对点通信。对于集体沟通来说,参与的唯一方式就是积极地进行集体呼吁。根据{{3}}的定义,“该调用与在程序中同一点执行的MPI_RECV(...,源,标记,通信,状态)调用所接收的相同消息相匹配” - - 例如,它只匹配像Recv那样的点对点的东西。
随着新的非阻塞集体进入MPI3,您可以使用MPI_Test(或MPI_Wait)来检查非阻塞请求的状态,就像使用非阻塞发送/接收一样,尽管我没有'我一直认为工作组的工作太紧密,所以我不知道细节。
答案 1 :(得分:1)
我不确定MPI标准是否排除了这一点,但我不知道如果有可能它会如何有用。在我使用mpi_probe
的(罕见)场合,我用它来查找传入消息的大小;当然,它也可以获得有关“飞行中”消息的其他信息。但mpi_bcast
是一个集体操作,因此通信器中的所有进程都知道您可以使用mpi_probe
查找的消息的所有内容。我想?