2011-01-20 182 views
1

我正在嘗試實現主人計劃。在MPI中使用非阻塞發送和阻塞接收?

我的主人有工人打算做的工作。每次工人完成一項工作,他都會向主人請求一份新工作,並由主人將其發送給他。工人正在計算最小路徑。當一個工人發現一個比他獲得的全球最小值更好的最小值時,他將它發送給每個人,包括主人。

我計劃讓工人和主人用MPI_ISEND發送數據。另外,我認爲接收應該被阻止。當沒有人要求工作或更新最佳結果時,主人無事可做,所以他應該阻止等待接收。另外,每個工人在完成工作之後都應該等待領取新工具。

儘管如此,我不知道的使用異步非阻塞發送的影響,並阻止同步接收

另一個我認爲是使用MPI_IPROBE,但我不確定這會給我任何優化。

請幫我理解我在做什麼是對的。這是正確的解決方案嗎?

回答

2

您可以將阻塞發送與非阻塞接收進行匹配,反之亦然,這不會導致任何問題。但是,如果在工作人員工作時,主人確實無事可做,工作人員在完成工作單位後應該阻止工作,那麼在這方面沒有任何阻塞溝通的理由。主人可以通過MPI_ANY_SOURCE發佈阻止接收,並且工作人員可以使用阻止發送來回傳他們的結果,因爲主人的匹配接收已經發布。

所以,我會讓Send-Recv在主人和工作人員之間交換工作單位,Isend-Irecv則用於廣播新的全球最低標準。