並行計算一個lifegame狀方案考慮在一個m * n個矩陣lifegame樣計算,它需要O(m * n個)開發每個週期。
我將使用Pthread和MPI將此程序修改爲並行版本。最簡單的方法是靜態分區,這意味着分割m行到t任務,每個任務處理一個m/t * n矩陣。 (t代表線程或進程的數量)
但是,此解決方案的負載平衡不佳。一個任務可能不處理任何事情,而另一個任務則必須計算幾乎滿的矩陣。
我首先想到的,使這個計算多個負載均衡是這樣的:
分區,以與負載平衡
- 保持一個M * 1數組來存儲多少個元素是每一行英寸
- 掃描測試用例後,爲每個任務分配i * n矩陣。 矩陣中的元素應該等於其他任務。 同時存儲每個任務中的元素數量(此處需要一個t * 1數組)
- 每個週期後,重新分配綁定到每個任務的矩陣。這將需要O(t * m)。
這將減少從O(m * n個)的時間重新分配給O(T *米)。我的第一個問題是我能否更快地重新分配?其次,在計算矩陣「邊緣」上的元素時,任務必須與附近的任務進行通信,這可能需要相當長的時間才能完成。爲了減少這種情況,我想我可以將原點矩陣分成幾個矩形,更多的四方不細。但我不知道該怎麼做,有沒有關於算法名稱的關鍵字可供我搜索?
謝謝。