并行写入独立值的总和

Write a sum of independent values in parallel

我有一个函数,比如说 foo() returns 一个 int 值,我必须将不同的值传递给这个函数以获得两个不同的值总结起来,例如。

result = foo(2) + foo(37)

我想让 foo(2)foo(37) 并行计算(同时)。有两个版本的 foo 可能会有所帮助,一个使用 for 循环,另一个使用递归。我对 Julia 和并行编程还很陌生,但我想解决这个问题,这样我就可以继续解决这个问题,直到我可以使用 Genie.jl 将它构建为 Web 应用程序。此外,除了文档之外,任何学习 Julia 并行编程的资源都将受到高度赞赏!

如果你想使用进程进行并行化,你可以使用 "distributed for" 循环:

8.2.3。汇总结果

第二种情况是当你想对每个项目执行一个小操作,但你也想在最后执行一个“聚合函数”来检索一个标量值(或者一个数组,如果输入是矩阵)。 在这些情况下,您可以使用 @distributed (aggregationFunction) for construct.

例如,您运行并行除以 2,然后使用总和作为聚合函数(假设有三个工作进程可用):

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

(来自 Julia Quick Syntax Reference

或者您可以使用线程。 Julia 已经有了多线程,但 Julia 1.3(在撰写本文时,在 rc4 中即将发布 days/weeks)将引入一个全面的线程 API.