具有更复杂元素类型的共享数组

时间:2016-03-27 06:09:27

标签: parallel-processing julia

简化示例:

nsize = 100
vsize = 10000
varray = [rand(vsize) for i in 1:nsize] #say, I have a set of vectors.

for k in 1:nsize
    varray[k] = rand(vsize, vsize) * varray[k]
end

显然,上面的for循环可以并行化。

根据朱莉娅手册中的Parallel Map and Loops, 我需要使用SharedArray。但是,ShardArray不能将Array{Float64,1}作为元素类型。

julia> a = SharedArray(Array{Float64,1}, nsize)
ERROR: ArgumentError: type of SharedArray elements must be bits types, got Array{Float64,1}
 in __SharedArray#138__ at sharedarray.jl:45
 in SharedArray at sharedarray.jl:116

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

目前,你不能,因为SharedArray需要一个连续的内存块,这意味着它的元素必须是"比特类型,"这对于Array来说并非如此。 (Array在C中实现,并且有一些标题信息,这使得它们不能密集包装。)

但是,如果你所有的"元素"数组具有相同的大小,并且你绝对不需要能够修改"内部"数组,您可以尝试使用FixedSizeArrays作为元素。