MPI - 如果在其中一个节点中未收到MPI_Bcast()发送的消息(不调用MPI_Bcast),是否会导致任何问题

时间:2013-07-11 08:45:56

标签: mpi

我有一个主节点,每隔一段时间使用MPI_Bcast广播一条消息。问题是,我有一个特定节点需要比其他节点运行慢一点,并且说,它只会在半个时间内参与bcast。就像它一样:

// -- iteration 1
Master: MPI_Bcast(msg1)
Node1: MPI_Bcast(msg1)
Node2: MPI_Bcast(msg1)
Node0: MPI_Bcast(msg1)

// -- iteration 2
Master: MPI_Bcast(msg2)
Node1: MPI_Bcast(msg2)
Node2: MPI_Bcast(msg2)
Node0: DoSomethingImportantAndDontParticipateInBcast()

// -- iteration 3
Master: MPI_Bcast(msg3)
Node1: MPI_Bcast(msg3)
Node2: MPI_Bcast(msg3)
Node0: MPI_Bcast(msg3)

这可能吗?请注意,在最后一次迭代中,我希望Node0接收msg3而不是msg2(它忽略了)。

1 个答案:

答案 0 :(得分:3)

您建议的模式不起作用,通信器中的所有进程都参与每个广播。

如果您按原样实施计划,则会发现node0MPI_Bcast(msg3)与其他进程看作MPI_Bcast(msg2)的广播匹配mpi_comm_create。没有单独识别广播的机制。自从我用不匹配的广播写了一个MPI程序以来,已经很长时间了,所以我不记得到底发生了什么,我不确定标准需要什么。一般来说,我希望不好的事情发生,可能所有参与更多广播的流程都比特别的流程停止等待。

你可以做的是使用node0来定义一个 intracommunicator ,它会排除{{1}},并根据需要在全局通信器和新通信器上调用广播。