2017-08-13 1 views
3

J'essaie d'écrire un simple code Julia pour le calcul parallèle.Comment utiliser la macro @everywhere dans un simple code Julia pour le calcul parallèle

j'ai écrit un simple code basé sur ce document: https://docs.julialang.org/en/latest/manual/parallel-computing

@everywhere function test(x) 
    return x * 2.0 
end 

nprocess = 5 
addprocs(nprocess) 
responses = Vector{Any}(nworkers()) 

for i in 1:nworkers() 
    responses[i] = remotecall(test, i+1, i) 
end 

for res in responses 
    wait(res) 
end 

Cependant, je reçu ce message d'erreur.

ERROR: LoadError: On worker 2:

UndefVarError: #test not defined

Je pense que la macro @everywhere ne fonctionne pas correctement. J'utilise Julia 0,6.

Est-ce que quelqu'un sait comment le réparer?

Répondre

4

Le @everywhere et le sont dans l'ordre inverse (entraînant les travailleurs supplémentaires à ne pas connaître la fonction test). L'inverse fonctionne et ne fait pas le :

nprocess = 5 
addprocs(nprocess) 
responses = Vector{Any}(nworkers()) 

@everywhere function test(x) 
    return x * 2.0 
end 

for i in 1:nworkers() 
    responses[i] = remotecall(test, i+1, i) 
end 

for res in responses 
    wait(res) 
end