在Julia中使用@distributed时可能的减速器功能列表

时间:2019-06-13 12:07:46

标签: parallel-processing julia

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

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

T1

不幸的是,我找不到任何可用作还原器的函数以及如何精确实现的列表。有这样的清单吗?

1 个答案:

答案 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,从而确保可以始终执行归约操作,并且优选地,归约的结果不取决于操作的顺序(您可以在上面的示例中看到,减少的顺序取决于工作人员的数量,而我故意选择了不具有此属性的函数。)