I am trying to learn parallel for loop in Julia, while I was confused by the result of the example code below:
addprocs(4)
@everywhere begin
N = 10
V = SharedArray{Int64,1}(N)
@sync @parallel for i = 1:N
V[i] = i
println(V[i])
end
end
By using println, I tried to identify which worker went through which step. Surprisingly, what I got from the above code was that each worker kept going through the entire iteration until the last worker (worker 3 in my case) finished the for loop:
From worker 4: 1
From worker 4: 2
From worker 4: 3
From worker 5: 1
From worker 5: 2
From worker 5: 3
From worker 5: 4
From worker 5: 5
From worker 5: 6
From worker 5: 4
From worker 5: 5
From worker 5: 6
From worker 2: 7
From worker 2: 8
From worker 2: 4
From worker 2: 5
From worker 2: 6
From worker 2: 9
From worker 2: 10
From worker 4: 1
From worker 4: 2
From worker 2: 7
From worker 2: 8
From worker 3: 9
From worker 5: 4
From worker 5: 5
From worker 5: 6
From worker 3: 10
From worker 3: 7
From worker 3: 8
From worker 3: 7
From worker 3: 8
From worker 3: 9
From worker 3: 10
From worker 2: 4
From worker 2: 5
From worker 2: 6
From worker 3: 7
From worker 3: 8
From worker 4: 3
From worker 4: 9
From worker 4: 10
From worker 4: 1
From worker 4: 2
From worker 4: 3
From worker 4: 1
From worker 4: 2
From worker 4: 3
From worker 5: 9
From worker 5: 10
This is not what I would expect from parallel for loop, as I thought the work should be distributed among the workers and then combined together, rather than being done separately for each of the worker. I mean, should the concept of parallel for loop be that each worker only goes through 2-3 steps?
Is something wrong with my code or I misunderstand the concept of parallel for loop?
Thanks!
Edit: I just realized that there is something to do with @everywhere. After I eliminated @everywhere, things work as expected.
srand(2017)) and specify how many processes you initialized, e.g. viaaddprocs(X)orjulia -p X? - Kevin L Keys