【发布时间】:2015-04-20 19:16:24
【问题描述】:
我已经实现了一种组合搜索算法(用于与更有效的优化技术进行比较)并尝试使用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 首先完成时,它worker 从项目5 开始,依此类推。每个项目的大小都比迭代次数大得多,我不太担心增加的通信开销。
【问题讨论】:
标签: matlab parallel-processing parfor