我有一个程序,其中有主/从设置,并且我已经实现了一些用于向从发送不同类型数据的主函数。有些函数向单个从发送,但是有些通过MPI_Bcast向所有从广播信息。
我希望在从中只有一个接收函数,因此我想知道是否可以探测消息并知道它是广播还是作为正常阻塞消息发送,因为接收广播和正常发送的方法不同。
根进程在广播中的角色不像发送;它通常不能只调用 MPI_Bcast 然后继续执行。实现几乎肯定会阻塞,直到某些其他数量的进程参与广播;和
广播中其他进程的角色不像接收消息;通常它将同时接收和发送信息。因此,参与广播不同于进行简单的 Recv 调用。
pvm_mcast
与MPI_Bcast
不同。它是一种多播操作,而不是广播操作,其语义类似于如果您发出多个MPI_Send
操作时所得到的内容。它允许您将数据发送到任意子进程,而MPI_Bcast
则将数据发送到_所有_进程,这样可以进行一些更高级别的优化。如果原始代码没有使用pvm_mcast
来执行完整的广播,则最好只使用一堆MPI_Isend
后跟MPI_Waitall
。然后您就能够探测了。 - Hristo Iliev