并行编写独立值的总和

我有一个函数,例如foo(),它返回一个int值,并且我必须将不同的值传递给该函数,以抵消两个必须求和的不同值。

result = foo(2) + foo(37)

,我想同时(同时)对foo(2)foo(37)进行并行计算。拥有两个版本的foo可能会有所帮助,一个使用for循环,另一个使用递归。我对朱莉娅(Julia)和并行编程很陌生,但是想解决这个问题,这样我可以一直保持下去,直到可以使用Genie.jl将其构建为Web应用程序为止。另外,除其文档外,任何与Julia一起学习并行编程的资源都将受到高度赞赏!

ning419 回答:并行编写独立值的总和

如果您想使用进程进行并行化,则可以使用“分布式”循环:

8.2.3。汇总结果

第二种情况是,当您想对每个项目执行小操作,但同时还想在末尾执行“聚合函数”以检索标量值(如果输入为矩阵,则为数组) 。 在这些情况下,可以使用 @distributed (aggregationFunction)进行构造。

作为示例,您并行运行除以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)将引入一个全面的线程API。

本文链接:https://www.f2er.com/3169713.html

大家都在问