【问题标题】: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