并行写入独立值的总和
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.
我有一个函数,比如说 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.