2012-06-24 119 views
3

我想在使用MPI的情況下開發一個任務調度器,其中有一個主處理器並且有工作/客戶處理器。每個工作人員都擁有需要計算的所有數據,但是可以從主服務器獲取索引。計算後,工作人員將一些數據返回給主人。問題是有些過程會很快,有些過程會很慢。 如果我運行一個循環,以便在每次迭代時主服務器發送和接收(阻塞/非阻塞)數據,那麼它將不能繼續下一步,直到它從指定給它的前一個索引接收到來自當前工作者的數據。底線是如果一個工作人員計算時間過長,那麼它就成爲限制因素,即使使用了非​​阻塞技術,主人也無法繼續爲下一個工作人員分配索引。是否有可能跳過分配給工人並轉到下一個。MPI任務調度

我開始認爲MPI可能無法做到這一點的範例。 python會是一個很好的平臺來完成任務調度嗎?

+1

LAM/MPI提供了一個[詳細示例](http://www.lam-mp​​i.org/tutorials/one-step/ezstart.php)你想實現什麼。請注意,「主/從」術語有點過時,爲了政治上的正確性,現在稱爲「經理/工人」。 –

回答

3

這是絕對有可能使用MPI_Irecv()MPI_Test()。所有主進程需要做的是爲每個工作進程發佈非阻塞接收,然後在循環中測試每個進程的數據。如果一個過程完成,發送一個新的索引,發佈一個新的非阻塞接收,並繼續。對於每個過程

+1

Yikes!現在很簡單。謝謝! – itachi

1

一個MPI_IRecv是一種解決方案。這在工作完成時需要取消不匹配的MPI_IRecv。

MPI_ANY_SOURCE是的備用路徑。這將允許管理進程在任何給定時間都有一個未完成的MPI_IRecv,MPI_Send的「下一個」進程將與MPI_ANY_SOURCE匹配。當沒有額外的工作要做時,這會在MPI_Send中阻塞幾個等級。某種「無所事事」的信號需要制定出來,所以隊伍可以乾淨地退出。