2013-12-10 76 views
1

我想編寫一個MPI程序,其中主線程不斷向工作人員提交新工作(即不只是在開始時,就像MapReduce模式一樣)。MPI分佈式,無序工作

最初,我們可以說,我向100名工作人員提交了100份工作。

然後,我想在工人完成工作時收到通知。我會發送下一份工作,其參數取決於迄今收到的所有結果。結果的順序不必保留,我只需要他們完成。

我可以使用C/C++/Python。

從文檔中,我似乎可以播放N個作業,並收集結果。但這不是我所需要的,因爲我沒有全部可用,並且聚集會阻止。基本上,我正在尋找一個異步的,任何工人recv調用。

+1

在術語* mpi任務農場*上使用您最喜愛的搜索引擎。這是一個很好的開始 - http://www.inf.ed.ac.uk/teaching/courses/ppls/farm.c –

回答

2

您可以使用MPI_ANY_SOURCEMPI_ANY_TAG從任何地方接收。收到之後,您可以讀取必須傳遞給MPI_Recv呼叫的MPI_Status結構中的信息(源和標籤)。

如果你使用它,你不需要任何異步通信,因爲主人'聽'每個人都要求新的工作並返回結果;並且每個從屬人員完成他的任務,然後將結果發送給主人請求新的工作並等待主人的答覆。

你不應該一定要使用分散/聚集,因爲這些是對數組數組的使用,你的問題似乎有或多或少的獨立任務。

+1

這似乎是正確的答案,並且實際上正在演示教程:http://www.lam-mp​​i.org/tutorials/one-step/ezstart.php – j13r