首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建和推送到共享或分布式数组阵列?

如何创建和推送到共享或分布式数组阵列?
EN

Stack Overflow用户
提问于 2021-02-19 19:24:16
回答 1查看 66关注 0票数 1

我已经编写了Julia代码,在其中我初始化了一个空数组,如下所示:

A= []

在后面的代码中,我简单地推送到这个数组,如下所示:

式中b= c,d,e,...是另一个数组,并且每个b可以有不同的长度。

这在非并行化的代码中工作得很好。但是,我想在并行化代码中做同样的事情,其中a= []是不同处理器可以推送到的共享或分布式数组。

SharedArray和DArray都不适合我。有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2021-02-20 07:08:59

首先,您应该始终需要声明数组中包含的内容,[]表示Any[],这几乎不是一个好主意。

让我们考虑这个带有占位符的向量:

代码语言:javascript
运行
复制
julia> a=[Int[] for _ in 1:8]
8-element Vector{Vector{Int64}}:
 []
 []
 []
 []
 []
 []
 []
 []

Vector包含对其他Vector的8个引用。

现在让我们分发它:

代码语言:javascript
运行
复制
julia> using Distributed; addprocs(4);

julia> @everywhere using DistributedArrays

julia> b = distribute(a)
8-element DArray{Vector{Int64}, 1, Vector{Vector{Int64}}}:
 []
 []
 []
 []
 []
 []
 []
 []

这个新的b现在可以通过每个工作进程都持有它的localpart的所有工作进程来使用。让我们改变它吧!

代码语言:javascript
运行
复制
julia> fetch(@spawnat 2 append!(localpart(b)[1], [1,2,3,4]));

julia> fetch(@spawnat 3 append!(localpart(b)[2], [10,20]));

julia> fetch(@spawnat 3 push!(localpart(b)[2], 30))
3-element Vector{Int64}:
 10
 20
 30

我们可以看到一切都像预期的那样工作(我们已经使用了fetch来确保我们的代码在远程工作者上执行)。

让我们知道检查主进程的b状态

代码语言:javascript
运行
复制
julia> b
8-element DArray{Vector{Int64}, 1, Vector{Vector{Int64}}}:
 [1, 2, 3, 4]
 []
 []
 [10, 20, 30]
 []
 []
 []
 []

您可以看到,我们已经成功地使用远程工作者对b进行了突变。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66276664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档