gpt4 book ai didi

parallel-processing - 并行映射和并行for循环之间的区别

转载 作者:行者123 更新时间:2023-12-04 14:22:11 25 4
gpt4 key购买 nike

当我阅读Julia的多核并行计算文档时,我注意到同时存在并行映射pmap和for-loop @distributed for

从文档中,“Julia的pmap是为每个函数调用都需要大量工作的情况而设计的。相反,@distributed for可以处理每次迭代很小的情况。”
pmap@distributed for之间的区别是什么?为什么@distributed for进行大量工作的速度很慢?

谢谢

最佳答案

问题是pmap可以实现负载平衡,而@distributed for可以将作业分成相等的块。您可以通过运行以下两个代码示例来确认这一点:

julia> @time res = pmap(x -> (sleep(x/10); println(x)), [10;ones(Int, 19)]);
From worker 2: 1
From worker 3: 1
From worker 4: 1
From worker 2: 1
From worker 3: 1
From worker 4: 1
From worker 3: 1
From worker 2: 1
From worker 4: 1
From worker 4: 1
From worker 2: 1
From worker 3: 1
From worker 2: 1
From worker 3: 1
From worker 4: 1
From worker 4: 1
From worker 3: 1
From worker 2: 1
From worker 4: 1
From worker 5: 10
1.106504 seconds (173.34 k allocations: 8.711 MiB, 0.66% gc time)

julia> @time @sync @distributed for x in [10;ones(Int, 19)]
sleep(x/10); println(x)
end
From worker 4: 1
From worker 3: 1
From worker 5: 1
From worker 4: 1
From worker 5: 1
From worker 3: 1
From worker 5: 1
From worker 3: 1
From worker 4: 1
From worker 3: 1
From worker 4: 1
From worker 5: 1
From worker 4: 1
From worker 5: 1
From worker 3: 1
From worker 2: 10
From worker 2: 1
From worker 2: 1
From worker 2: 1
From worker 2: 1
1.543574 seconds (184.19 k allocations: 9.013 MiB)
Task (done) @0x0000000005c5c8b0

您会看到大的工作(值 10)使 pmap在获得大型工作的 worker 上执行所有小型工作(在我的示例中, worker 5仅工作 10,而从 worker 24的工作是所有其他工作)。另一方面, @distributed for为每个 worker 分配了相同数量的作业。因此,获得了工作 10的 worker (第二个示例中的 worker 2)仍然必须做四个短期工作(因为每个 worker 平均要完成 5 worker -我的示例中总共有 20 worker 和 4 worker )。

现在 @distributed for的优势在于,如果工作便宜,那么在工作人员之间平均分配工作就不必进行动态调度,而动态调度也不是免费的。

总而言之,如文档所述,如果作业很昂贵(尤其是其运行时间可能相差很大),则最好使用 pmap,因为它会进行负载平衡。

关于parallel-processing - 并行映射和并行for循环之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55697905/

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