gpt4 book ai didi

parallel-processing - @parallel 和 pmap 到底有什么区别?

转载 作者:行者123 更新时间:2023-12-03 20:28:32 29 4
gpt4 key购买 nike

正如标题所说:@parallel 之间究竟有什么区别?和 pmap ?我的意思不是明显的一个是循环的宏,另一个适用于函数,我的意思是它们的实现究竟有什么不同,我应该如何使用这些知识在它们之间进行选择?

我问的原因是我写的很多应用程序都可以使用任何一种结构:我可以编写一个循环并用 @parallel 计算一些东西。 ,或者将循环中的内容包装到一个函数中并调用 pmap在那。我一直遵循使用 @parallel 的建议对于快速评估的事物和 pmap对于每个任务需要更长的时间(如文档中所述)的调用,但我觉得如果我对它在做什么有更好的了解,我将能够做出更好的选择。

例如:@parallel在评估之前划分工作?我注意到,如果我运行一个并行循环,其中每个内部调用都花费随机时间,@parallel可能需要很长时间,因为最后我只有很少的进程仍在工作。 pmap在相同的微测试中似乎没有这个:是 pmap根据需要重新分配工作?

其他类似的问题都是因为我不知道究竟是怎么回事pmap不同于 @parallel .

最佳答案

@parallel将把要完成的工作分配给可用的 worker 马上 .注释在 ?@parallel我们得到 The specified range is partitioned ... across all workers. pmap相比之下,将启动每个 worker 的工作。一旦一个 worker 完成了一项工作,它就会给它下一个可用的工作。例如,它类似于 Python 中常见的基于队列的多处理。因此,这不是“重新分配”工作的情况,而是首先只在正确的时间将其分发给正确的 worker 。

我编写了以下示例,我相信它说明了这一点。在这个有点愚蠢的例子中,我们有两个 worker ,其中一个慢,另一个快两倍。理想情况下,我们希望给速度快的工作人员提供两倍于慢工作人员的工作量。 (或者,更现实的是,我们会有快速和慢速的工作,但原理是完全一样的)。 pmap将完成此操作,但是 @parallel惯于。

对于每个测试,我初始化以下内容:

addprocs(2)

@everywhere begin
function parallel_func(idx)
workernum = myid() - 1
sleep(workernum)
println("job $idx")
end
end

现在,对于 @parallel测试,我运行以下命令:
@parallel for idx = 1:12
parallel_func(idx)
end

并取回打印输出:
julia>  From worker 2:  job 1
From worker 3: job 7
From worker 2: job 2
From worker 2: job 3
From worker 3: job 8
From worker 2: job 4
From worker 2: job 5
From worker 3: job 9
From worker 2: job 6
From worker 3: job 10
From worker 3: job 11
From worker 3: job 12

几乎是甜的。 worker 们平均“分担”了工作。注意,每个 worker 完成了 6 个工作,尽管 worker 2 的速度是 worker 3 的两倍。这可能是感人的,但效率低下。

pmap测试,我运行以下命令:
pmap(parallel_func, 1:12)

并得到输出:
From worker 2:  job 1
From worker 3: job 2
From worker 2: job 3
From worker 2: job 5
From worker 3: job 4
From worker 2: job 6
From worker 2: job 8
From worker 3: job 7
From worker 2: job 9
From worker 2: job 11
From worker 3: job 10
From worker 2: job 12

现在,请注意 worker 2 执行了 8 项工作, worker 3 执行了 4 项工作。这与他们的速度以及我们想要获得最佳效率的速度完全成正比。 pmap是一个艰巨的任务高手——从每个人的能力。

因此,Julia 文档中的建议是有道理的。如果您有一些简单的小工作,那么这些问题很可能是 @parallel不会造成问题。对于更大或更复杂的工作, pmap有优势。

关于parallel-processing - @parallel 和 pmap 到底有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37846838/

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