2017-04-21 3 views
3

Ich habe vor kurzem begonnen, Parallelverarbeitung in Julia zu studieren, und ich habe ein Problem, das ich wirklich nicht verstehe, wie man repariert.Parallele Verarbeitung: @Everywhere, Verteilungen und Typen

Nachdem ich Julia mit julia -p 4 ausgeführt habe, möchte ich das Distributionsmodul in allen Prozessen laden und ich möchte einen Typ definieren, der von Distributionen abhängt.

folgende Arbeiten scheinbar korrekt, wenn ich es enthalten:

@everywhere using Distributions 

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

Wenn ich genau den gleichen Code wie ein Modul schreiben, dann tut es nicht:

module test 

    @everywhere using Distributions 

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

    export TypeDistrib 
end 

Die oben folgendes gibt Fehlermeldung:

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

bitten Sie klären, was ich nicht richtig hier tue?

Hinweis: Ich habe den vollständigen Pfad in der Fehlermeldung mit *** ersetzt, da es verwirrend war.

Antwort

3

@everywhere something wertet something im Hauptmodul über alle Prozesse aus. Und in diesem Fall nicht in test Modul und damit der Fehler im zweiten Fall und nicht in der ersten.

Vielleicht

@everywhere module test 
    using Distributions 

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

    export TypeDistrib 
end 

tut, was gemeint ist.

+0

Dies ist wahrscheinlich, was es sein sollte. Es ist jedoch nicht klar, warum genau der Code, den ich geschrieben habe, nicht funktioniert. Könntest du bitte etwas genauer erklären? – merch

+0

'using Distributions' wird so ausgewertet, als wäre es im Hauptmodul geschrieben, und' Distributions.Normal {T} 'wird im' test' Modul gesucht (wo es definiert ist) und wird daher nicht gefunden. Zum Beispiel funktioniert 'Main.Distributions.Normal {T}' in 'test' wie in der Frage definiert. –

Verwandte Themen