【问题标题】:List of possible reducer functions when using @distributed in Julia在 Julia 中使用 @distributed 时可能的 reducer 函数列表
【发布时间】:2019-10-28 00:37:46
【问题描述】:

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

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

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

不幸的是,我找不到任何可以将哪些函数用作减速器以及如何正确使用它的列表。有这样的清单吗?

【问题讨论】:

    标签: parallel-processing julia


    【解决方案1】:

    您可以采用任何带有两个参数的函数,以便列表是开放的并且可以任意扩展。参见例如

    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,因此可以保证归约操作始终可以执行,并且最好归约的结果不依赖于操作的顺序(您可以在上面的例子中看到减少的顺序取决于工人的数量,我故意选择了一个没有这个属性的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2021-11-07
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多