我正在阅读documentation,以使用@distributed在Julia中编写并行的for循环,并且看到可以指定一个作用于循环的每次迭代结果的reducer函数。
例如,如文档中的下一个示例所示,可以对每个工人的结果求和:
T1
不幸的是,我找不到任何可用作还原器的函数以及如何精确实现的列表。有这样的清单吗?
答案 0 :(得分:3)
您可以采用带有两个参数的任何函数,以便打开列表并可以对其进行任意扩展。参见例如
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 where T
,从而确保可以始终执行归约操作,并且优选地,归约的结果不取决于操作的顺序(您可以在上面的示例中看到,减少的顺序取决于工作人员的数量,而我故意选择了不具有此属性的函数。)