【问题标题】:MPI - Will it cause any problems if a message sent by MPI_Bcast() is not received in one of the nodes (doesn't call MPI_Bcast)MPI - 如果 MPI_Bcast() 发送的消息未在其中一个节点中接收到,是否会导致任何问题(不调用 MPI_Bcast)
【发布时间】:2013-07-09 11:05:51
【问题描述】:

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

【问题讨论】:

  • sendbroadcast 在 MPI 中表示不同的东西,有多种类型的 send。请解释更多。
  • @HighPerformanceMark 我已经更新了这个问题。谢谢。 tbh,我不确定我是否完全理解 MPI 中的广播,所以如果我遗漏了什么,请告诉我(我希望我没有)
  • 这是一个错误的程序。 MPI 集体必须被集体调用。故事结束。

标签: mpi


【解决方案1】:

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

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

您可以做的是定义一个intracommunicator,使用mpi_comm_create,不包括node0,并根据需要在全局通信器和新通信器上调用广播。

【讨论】:

    猜你喜欢
    • 2021-06-17
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2016-01-09
    • 2014-07-06
    • 2013-10-14
    • 2012-06-06
    • 2017-01-25
    相关资源
    最近更新 更多