我實現了一個組合搜索算法(進行比較,從而更有效的優化技術),並試圖改善其運行時與parfor
偷竊。工作並行計算工具箱
不幸的是,工作任務似乎是非常嚴重失去平衡。
每個子項目i
約爲nCr(N - i, 3)
複雜性。正如你所看到的,任務i < N/4
涉及顯著更多的工作比i > 3*N/4
,但似乎利用MATLAB所有i < N/4
到單個工作分配。
這是真的,MATLAB劃分基礎上,循環範圍的同樣大小的子集的工作?
不,this question援引文件說它沒有。
是否有重新平衡這個沒有硬編碼的工人數量(例如,如果我在游泳池要求恰好有4名工人,那麼我可以用兩個較高位交換的i
兩個最低位,以確保一個方便的方法每個工人都收到了一些簡單和困難的任務)?
我不認爲一個完整的「工作竊取」的實施是必要的,或許只是分配1
,2
,3
,4
工人,那麼當4
完成第一,它的工人開始上項目5
,等等。每個項目的大小比我不太擔心增加的通信開銷的迭代次數要大得多。
或許與'mod',而不是'randperm':假設'nIterations'是'ñWorkers'的倍數,使用'permutedIterations =重塑(重塑(1:nIterations,nWorkers,[])',1,[]。)' –