Have you tried this with a normal Array instead of a SharedArray for the outputs? (There may or may not be other problems and/or bugs in Julia, but I do know that SharedArray is considered experimental.)
On Saturday, April 4, 2015 at 9:20:48 AM UTC-5, Nils Gudat wrote: > > There's something weird happening in my recently parallelized code. When > running it without adding some worker processes first, the results are > completely off and after some investigation I found that this was due to > assignment operations going wrong - results of computations were assigned > to different Arrays than the intended ones. A small working example > illustrating the point: > > x1 = linspace(1, 3, 3) > x2 = linspace(1, 3, 3) > x3 = linspace(1, 3, 3) > > function getresults(x1::Array, x2::Array, x3::Array) > result1 = SharedArray(Float64, (3,3,3)) > result2 = similar(result1) > result3 = similar(result1) > > @sync @parallel for a=1:3 > for b=1:3 > for c=1:3 > result1[a,b,c] = x1[a]*x2[b]*x3[c] > result2[a,b,c] = sqrt(x1[a]*x2[b]*x3[c]) > result3[a,b,c] = (x1[a]*x2[b]*x3[c])^2 > end > end > end > return sdata(result1), sdata(result2), sdata(result3) > end > > (r1,r2,r3) = getresults(x1, x2, x3) > > nprocs()==CPU_CORES || addprocs(CPU_CORES-1) > (r1_par,r2_par,r3_par) = getresults(x1, x2, x3) > > > When I run this on my system (v0.3.6), the parallelized version works as > intended, while running the code without adding workers first gives the > expected results for r1 and r3, but r2 holds the same results as r3. The > behaviour in my original problem was similar, the code returns three > Arrays, but running it without additional workers those Arrays all return > the same contents. > > Is there something in the @sync or @parallel macros that causes this? How > should a code be written to ensure that it works both with one and multiple > cores? >
