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

Parallel processing 具有更复杂元素类型的共享数组,parallel-processing,julia,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循环可以并行化 根据Julia手册中的说明, 我需要使用SharedArray。但是,ShardArray不能将数组{Float64

一个简化的例子:

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循环可以并行化

根据Julia手册中的说明, 我需要使用
SharedArray
。但是,
ShardArray
不能将
数组{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

如何解决这个问题?

目前,您不能,因为
共享Darray
需要一个连续的内存块,这意味着它的元素必须是“位类型”,而
数组的情况并非如此。(
Array
是用C实现的,它有一些头信息,这使得它们不能进行密集的打包。)


但是,如果所有“元素”数组都具有相同的大小,并且您不一定需要修改“内部”数组的单个元素,那么您可以尝试使用
staticarray
作为元素。(感谢下面评论中的@Wouter指出这需要更新。)

如果有人在2021年仍然存在此问题,请快速更新:使用StaticArrayShanks Wouter,我编辑了上述内容并向您致谢。