【问题标题】:How can we call SharedArray in Julia?我们如何在 Julia 中调用 SharedArray?
【发布时间】:2017-08-08 08:06:22
【问题描述】:

我有一个函数,我想在主函数中调用它。所有参数都是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

【问题讨论】:

    标签: parallel-processing julia


    【解决方案1】:

    你可以定义

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

    它会起作用的。这些调度指定对性能没有任何作用。如果您想将其限制为“数组的东西”,那么您可以这样做

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

    同样,这不会影响性能,仅用于设置调度和抛出错误。你的代码中发生的事情是你有out::SharedArray,然后当out不是SharedArray时抛出一个错误(你的例子没有说明为什么它不是SharedArray,但错误消息说outMatrix)

    【讨论】:

    • out 在我想并行代码之前是一个矩阵。但是矩阵是二维数组,当我使用 typeof(out) 时,我发现它可以是数组。所以我把它用作 sharedArray
    • 对,但是如果你这样做,那么每个版本都可以工作,不管你放什么数组。
    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2012-08-19
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多