gpt4 book ai didi

matlab - 使用 Parallel Computing Toolbox 窃取工作

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:27 25 4
gpt4 key购买 nike

我已经实现了组合搜索算法(用于与更有效的优化技术进行比较)并尝试使用 parfor 改进其运行时间.

不幸的是,工作分配似乎非常不平衡。

每个子项目i复杂度约为 nCr(N - i, 3) .如您所见,任务 i < N/4涉及的工作比 i > 3*N/4 多得多,但似乎 MATLAB 正在分配所有 i < N/4给一个 worker 。

MATLAB 根据循环范围的大小相等的子集来划分工作是真的吗?

No, this question cites the documentation saying it does not.

有没有一种方便的方法来重新平衡这个而不对 worker 的数量进行硬编码(例如,如果我需要池中恰好有 4 个 worker ,那么我可以将 i 的两个最低位交换为两个更高的位,以确保每个 worker 接受了一些既简单又困难的任务)?

我不认为一个完整的“工作窃取”实现是必要的,也许只是分配 1 , 2 , 3 , 4给 worker ,然后当4首先完成,其工作人员开始处理项目 5 , 等等。每个项目的大小都远远大于迭代次数,因此我不太担心会增加通信开销。

最佳答案

如果循环迭代确实是提前分配的(这意味着最后,有一个 worker 必须完成几个迭代,而其他 worker 是空闲的 - 真的是这样吗?),确保混合的最简单方法是随机排列循环迭代:

permutedIterations = randperm(nIterations);
permutedResults = cell(nIterations,1); %# or whatever else you use for storing results

%# run the parfor loop, completing iterations in permuted order
parfor iIter = 1:nIterations
permutedResults(iIter) = f(permutedIterations(iIter));
end

%# reorder results for easier subsequent analysis
results = permutedResults(permutedIterations);

关于matlab - 使用 Parallel Computing Toolbox 窃取工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29756490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com