0

我有一个主节点,它经常使用 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(它被忽略了)。

4

1 回答 1

3

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

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

您可以做的是使用 定义一个内部通信器mpi_comm_create,它可以根据需要在全局通信器和新通信器上排除node0和调用广播。

于 2013-07-11T09:11:26.873 回答