在Julia中将数组转换为SharedArray

在Julia中将数组转换为SharedArray,julia,Julia,简单的问题。假设我有一些数组: julia> A = randn(3,3) 如何将其转换为一个可由并行进程访问/更改的文件?到目前为止,尚未实现自动执行此操作的转换函数: julia> SharedArray(A) ERROR: MethodError: `convert` has no method matching ... 我认为唯一的方法是使用构造函数(并传递适当的初始化函数,init): 这里有一个简单的方法。不确定是否有更好的: addprocs(3) # add wo

简单的问题。假设我有一些数组:

julia> A = randn(3,3)
如何将其转换为一个可由并行进程访问/更改的文件?到目前为止,尚未实现自动执行此操作的转换函数:

julia> SharedArray(A)
ERROR: MethodError: `convert` has no method matching ...
我认为唯一的方法是使用构造函数(并传递适当的初始化函数,
init
):


这里有一个简单的方法。不确定是否有更好的:

addprocs(3) # add worker processes
A = randn(3,4)
S = SharedArray(Float64, size(A))
S[:] = A[:] # works because A is defined on master process 1

中已经实现了不同的转换方法。下表定义了如何将数组转换为相同元素类型的SharedArray:

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

因此,只需调用convert函数即可将数组转换为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

进行转换的预期方法是直接调用
convert()
函数,将source作为参数传递给构造函数可能不会得到所需的答案。
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