Parallel processing 并行写入一个独立值的总和
我有一个函数,比如说Parallel processing 并行写入一个独立值的总和,parallel-processing,julia,distributed-computing,Parallel Processing,Julia,Distributed Computing,我有一个函数,比如说foo() result = foo(2) + foo(37) 我想让那些foo(2)和foo(37)并行计算(同时)。有两个版本的foo,一个使用for循环,另一个使用递归循环,这可能会有所帮助。我对Julia和并行编程非常陌生,但我想解决这个问题,这样我就可以一直坚持下去,直到我可以用Genie.jl将它构建成一个web应用程序。此外,除了Julia的文档之外,您还可以使用任何资源了解Julia的并行编程,我们将不胜感激 如果要使用进程进行并行化,可以使用“分布式for
foo()
result = foo(2) + foo(37)
我想让那些foo(2)
和foo(37)
并行计算(同时)。有两个版本的foo
,一个使用for循环,另一个使用递归循环,这可能会有所帮助。我对Julia和并行编程非常陌生,但我想解决这个问题,这样我就可以一直坚持下去,直到我可以用Genie.jl将它构建成一个web应用程序。此外,除了Julia的文档之外,您还可以使用任何资源了解Julia的并行编程,我们将不胜感激 如果要使用进程进行并行化,可以使用“分布式for”循环:
8.2.3。汇总结果
第二种情况是,您希望对每个项执行一个小操作,但也希望在最后执行“聚合函数”以检索标量值(如果输入是矩阵,则为数组)。
在这些情况下,您可以使用分布式的聚合函数进行构造
例如,您并行运行一个除以2的运算,然后使用总和作为聚合函数(假设有三个工作进程可用):
(来自)
或者,您可以使用线程。Julia已经有了多线程,但是Julia 1.3(将在几天/几周后发布,在撰写本文时将在rc4中发布)将引入一个全面的线程API。因此,它将不再是“实验性的”,因为他们在文档中到处都清楚地说明了这一点?
function f(n)
s = 0.0
for i = 1:n
s += i/2
end
return s
end
function pf(n)
s = @distributed (+) for i = 1:n # aggregate using sum on variable s
i/2
# last element of for cycle is used by the aggregator
end
return s
end
@benchmark f(10000000) # median time: 11.478 ms
@benchmark pf(10000000) # median time: 4.458 ms