简化示例:
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
我该如何解决这个问题?
答案 0 :(得分:4)
目前,你不能,因为SharedArray
需要一个连续的内存块,这意味着它的元素必须是"比特类型,"这对于Array
来说并非如此。 (Array
在C中实现,并且有一些标题信息,这使得它们不能密集包装。)
但是,如果你所有的"元素"数组具有相同的大小,并且你绝对不需要能够修改"内部"数组,您可以尝试使用FixedSizeArrays
作为元素。