在Julia中将数组转换为SharedArray

时间:2016-01-07 19:48:49

标签: julia

简单问题。让我们说我有一些数组:

julia> A = randn(3,3)

如何将其转换为SharedArray以便并行进程可以访问/更改它?截至目前,没有实现转换功能来自动执行此操作:

julia> SharedArray(A)
ERROR: MethodError: `convert` has no method matching ...

我认为执行此操作的唯一方法是使用构造函数(并传递适当的初始化函数init):

SharedArray(T::Type, dims::NTuple; init=false, pids=Int[])

2 个答案:

答案 0 :(得分:5)

sharedarray.jl 中已实施了不同的转换方法。下面的一个定义了如何将数组转换为相同元素类型的SharedArray:

convert(::Type{SharedArray},A::Array)=(S=SharedArray(eltype(A),size(A));copy!(S,A))

因此,只需调用convert function:

即可将数组转换为SharedArray
julia> src=ones(2,4)
2x4 Array{Float64,2}:
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0

julia> convert(SharedArray,src)
2x4 SharedArray{Float64,2}:
 1.0  1.0  1.0  1.0
 1.0  1.0  1.0  1.0

答案 1 :(得分:3)

这是一种简单的方法。不确定是否有更好的东西:

em