Parallel processing 在Julia中使用@distributed时可能使用的reducer函数列表

Parallel processing 在Julia中使用@distributed时可能使用的reducer函数列表,parallel-processing,julia,Parallel Processing,Julia,我正在阅读Julia中使用@distributed编写并行for循环的指南,并发现可以指定一个reducer函数,该函数作用于循环每次迭代的结果 例如,如文档中的下一个示例所示,可以对每个工人的结果求和: nheads = @distributed (+) for i = 1:200000000 Int(rand(Bool)) end 不幸的是,我找不到任何关于哪些函数可以用作减缩器的列表,也找不到确切的方法。有这样一个列表吗?您可以使用任何带有两个参数的函数,这样列表是开放的,可以任

我正在阅读Julia中使用@distributed编写并行for循环的指南,并发现可以指定一个reducer函数,该函数作用于循环每次迭代的结果

例如,如文档中的下一个示例所示,可以对每个工人的结果求和:

nheads = @distributed (+) for i = 1:200000000
    Int(rand(Bool))
end

不幸的是,我找不到任何关于哪些函数可以用作减缩器的列表,也找不到确切的方法。有这样一个列表吗?

您可以使用任何带有两个参数的函数,这样列表是开放的,可以任意扩展。见例

julia> addprocs(4);

julia> x = @distributed (a,b) -> (a,b, "val") for i in 1:10
       i
       end
(((((1, 2, "val"), 3, "val"), ((4, 5, "val"), 6, "val"), "val"), (7, 8, "val"), "val"), (9, 10, "val"), "val")

julia> addprocs(4);

julia> x = @distributed (a,b) -> (a,b, "val") for i in 1:10
       i
       end
((((((((1, 2, "val"), (3, 4, "val"), "val"), 5, "val"), 6, "val"), 7, "val"), 8, "val"), 9, "val"), 10, "val")
然而,对于在典型场景中工作的操作,该函数具有签名
fun(::T,::T)::T,其中T
,以便保证始终可以执行缩减操作,并且优选地,缩减的结果不依赖于操作的顺序(您可以在上面的示例中看到,减少的顺序取决于工人的数量,我特意选择了一个不具有此属性的函数)