MPI—如果其中一个节点未接收到由MPI_Bcast()发送的消息(不调用MPI_Bcast),会不会导致任何问题
我有一个主节点,它经常使用MPI_Bcast广播消息。问题是,我有一个特定的节点需要比其他节点运行得慢一点,比如说,它只会在一半的时间内参与bcast。所以它就像:MPI—如果其中一个节点未接收到由MPI_Bcast()发送的消息(不调用MPI_Bcast),会不会导致任何问题,mpi,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_Bc
// -- 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(它忽略了它) 您建议的模式不起作用,通信器中的所有进程都参与每个广播 如果按计划执行,您会发现
node0
将MPI\u Bcast(msg3)
与其他进程视为MPI\u Bcast(msg2)
的广播相匹配。没有单独识别广播的机制。很长一段时间以来,我都没有编写一个MPI程序,因为它的广播不匹配,所以我记不起到底发生了什么,我也不确定标准要求什么。总的来说,我预计会发生不好的事情,可能所有参与比特别节目更多广播的进程都会陷入停顿等待
您可以使用
mpi\u comm\u create
定义一个内部通讯器,它排除node0
,并根据您的意愿在全局通讯器和新通讯器上调用广播。您建议的模式不起作用,通讯器中的所有进程都参与每次广播
如果按计划执行,您会发现node0
将MPI\u Bcast(msg3)
与其他进程视为MPI\u Bcast(msg2)
的广播相匹配。没有单独识别广播的机制。很长一段时间以来,我都没有编写一个MPI程序,因为它的广播不匹配,所以我记不起到底发生了什么,我也不确定标准要求什么。总的来说,我预计会发生不好的事情,可能所有参与比特别节目更多广播的进程都会陷入停顿等待
您可以使用
mpi\u comm\u create
定义一个内部通讯器,它不包括node0
,并根据需要在全局通讯器和新通讯器上调用广播。send和broadcast在mpi中的含义不同,并且有多种类型的发送。请解释更多。@HighPerformanceMark我已经更新了问题。谢谢tbh,我不确定我是否完全理解MPI中的广播,所以如果我遗漏了什么(我希望没有),请务必让我知道这是一个错误的节目。MPI集体必须统称为集体。故事结束。发送和广播在MPI中的含义不同,发送的类型也多种多样。请解释更多。@HighPerformanceMark我已经更新了问题。谢谢tbh,我不确定我是否完全理解MPI中的广播,所以如果我遗漏了什么(我希望没有),请务必让我知道这是一个错误的节目。MPI集体必须统称为集体。故事结束了。