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