I am trying to solve a problem in which I have to evaluate a function, f(x), for several different values of an argument x. I want to write a function that depending on the number of available processes it uses either map (if
nprocs()==1) or pmap (if
nprocs()>1). The function f(x) I want to evaluate requires a preallocated matrix and this is where I find a behaviour I do not understand.
This minimal example shows the problem I am facing:
using Distributed addprocs(4) @everywhere using LinearAlgebra function test1() if nprocs()>1 @everywhere A = zeros(100, 100) return eigvals(A) else B = zeros(100, 100) return eigvals(B) end end function test2() if nprocs()>1 @everywhere A = zeros(100, 100) return eigvals(A) else A = zeros(100, 100) return eigvals(A) end end
If I run
test1(), it works without problems. However, when I run
test2(), I get the error:
UndefVarError: A not defined
If I run the code without adding any procs, both
test2() work. Of course I can just write my code in the style of
test1(), but I would like to understand why
test2() fails. Thanks in advance for any suggestion!
EDIT: Changed the title of the topic to reflect the fact that the issue seems to be unrelated to the use of and