我有一个功能,我想在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
答案 0 :(得分:2)
您可以定义
@everywhere function func2!(v,
out,
out2)
它会起作用。那些派遣指定不会为表现做任何事情。如果你想将它限制为&#34;数组&#34;,那么你可以做
@everywhere function func2!(v,
out::AbstractArray,
out2::AbstractArray)
同样,这不会影响性能,仅用于设置调度和抛出错误。您的代码中发生的事情是out::SharedArray
,当out
不是SharedArray
时(当您的示例没有显示为什么它不是SharedArray
时发生了错误) {1}},但错误消息是out
是Matrix
)