2017-04-21 47 views
3

我最近開始研究Julia中的並行處理,我遇到了一個我並不真正瞭解如何解決的問題。並行處理:@everywhere,distributions and types

在執行了Julia julia -p 4之後,我想在所有進程中加載​​Distributions模塊,並且我想定義一個依賴於分佈的Type。

下顯然可以正常工作,當我有它:

@everywhere using Distributions 

type TypeDistrib{T <: Float64} 
     d::Distributions.Normal{T} 
end 

如果我寫完全相同的代碼作爲一個模塊,那麼它不會:

module test 

    @everywhere using Distributions 

    type TypeDistrib{T <: Float64} 
     d::Distributions.Normal{T} 
    end 

    export TypeDistrib 
end 

上面提供了以下錯誤信息:

ERROR: LoadError: UndefVarError: Distributions not defined in include_from_node1(::String) at ./loading.jl:488 in include_from_node1(::String) at /Applications/Julia-0.5.app/Contents/Resources/julia/lib/julia/sys.dylib:? while loading /***/test.jl, in expression starting on line 4

請您澄清一下我在這裏做得不對嗎?

注意:我用***代替了錯誤信息中的完整路徑,因爲它很混亂。

回答

3

@everywhere something在所有進程的主模塊中評估something。而在這種情況下,不在test模塊中,因此在第二種情況下出錯,而不在第一種情況下。

也許

@everywhere module test 
    using Distributions 

    type TypeDistrib{T <: Float64} 
     d::Distributions.Normal{T} 
    end 

    export TypeDistrib 
end 

做是什麼意思。

+0

這可能是它應該是。但是,爲什麼我寫的代碼無法正常工作,這並不是非常清楚。你能否澄清一點你的觀點? – merch

+0

'使用Distributions'就像在Main模塊中寫入一樣進行評估,並且'Distributions.Normal {T}'在'test'模塊(它被定義的地方)中被搜索,所以找不到它。例如,使用'Main.Distributions.Normal {T }'在問題中定義的'test'中工作。 –