【问题标题】:Synchronously Outputting to DistributedArray of Vectors in Parallel并行同步输出到 DistributedArray of Vectors
【发布时间】:2022-11-19 10:03:01
【问题描述】:

我正在尝试分发一个将向量输出到数组中的函数。

我跟随this 发布了类似以下代码的内容:

a = distribute([Float64[] for _ in 1:nrow(df)])
@sync @distributed for i in 1:nrow(df)
  append!(localpart(a)[i], foo(df[i]))
end

但我收到以下错误:

BoundsError:尝试访问索引 [147] 处的 145 元素 Vector{Vector{Float64}}

我只与 SharedArrays 并行化过,这不是一个选项,因为我需要将向量存储在共享数组中。任何和所有的建议都会挽救生命。

【问题讨论】:

    标签: parallel-processing julia


    【解决方案1】:

    每个本地部分都从一个开始索引。 因此,您需要在全局索引和本地索引之间进行转换。

    函数DistributedArrays.localindices() 返回一个单元素元组,其中包含映射到本地部分的一系列全局索引。 此信息又可用于索引转换:

    @sync @distributed for i in 1:nrow(df)
        id = i - DistributedArrays.localindices(a)[1][1] + 1
        push!(localpart(a)[id], f(df[i,1]))
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多