2013-07-11 44 views
0

我有一個主節點,每隔一段時間使用MPI_Bcast廣播消息。問題是,我有一個特定節點需要比其他節點運行慢一點,並且說,它只會在一半時間內參加bcast。所以它像:MPI - 如果MPI_Bcast()發送的消息未在其中一個節點中收到(不會調用MPI_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

*發送*和*廣播*在MPI中表示不同的東西,並且有多種類型的發送。請解釋更多。 –

+0

@HighPerformanceMark我已經更新了這個問題。謝謝。 tbh,我不確定我完全理解MPI廣播,所以請讓我知道如果我失去了一些東西(我希望我不是) – Mel

+0

這是一個錯誤的程序。 MPI集體必須集體呼叫。故事結局。 – Jeff

回答

3

您的建議模式將不起作用,通信器中的所有進程都參與每個廣播。

如果你要實現你的計劃,你會發現node0匹配MPI_Bcast(msg3)廣播,其他進程看作MPI_Bcast(msg2)。沒有單獨識別廣播的機制。自從我編寫了一個MPI程序以及不匹配的廣播,這是很長的一段時間,所以我不記得會發生什麼,我不確定標準要求什麼。一般而言,我預計會發生不好的事情,可能所有參與廣播的流程比專門的流程停止等待。

你可以做的是定義一個intracommunicator,使用mpi_comm_create,其中不包括node0並呼籲全球溝通,並根據需要將新的兩個節目。

相關問題