我们如何在Julia中调用SharedArray?

时间:2017-08-07 23:57:21

标签: parallel-processing julia

我有一个功能,我想在main函数中调用它。所有参数都是sharedArray,我们有一个变量type。当我想运行该程序时,我收到了一个错误。

@everywhere type dty{T <: Real}
    ...... (some variable)
end

@everywhere function func2!(v::dty,
                          out::SharedArray,
                          out2::SharedArray)
........
end

function func1()
...
out    = SharedArray{Float64,2}(n,m)
out2   = SharedArray{Float64,2}(n,m)
......
func2!(v , out, out2)
end

错误:

MethodError: no method matching func2!(::dty{Float64}, ::Array{Float64,2}, ::SharedArray{Float64,2}, ::SharedArray{Float64,2})
Closest candidates are:
  func2!(::dty, ::SharedArray, ::SharedArray) at In[3]:64

1 个答案:

答案 0 :(得分:2)

您可以定义

@everywhere function func2!(v,
                          out,
                          out2)

它会起作用。那些派遣指定不会为表现做任何事情。如果你想将它限制为&#34;数组&#34;,那么你可以做

@everywhere function func2!(v,
                          out::AbstractArray,
                          out2::AbstractArray)

同样,这不会影响性能,仅用于设置调度和抛出错误。您的代码中发生的事情是out::SharedArray,当out不是SharedArray时(当您的示例没有显示为什么它不是SharedArray时发生了错误) {1}},但错误消息是outMatrix