On Tuesday, November 11, 2014 5:10:30 AM UTC+11, DrKey wrote: > > Here is what i tried: > variant1: > > forcp = zeros(3,1); > > forcp = @parallel (hcat) for partA = 1:nPart > for partB = (partA+1):nPart > ... > end > forcp = forces[:,partA]; > end > > variant2: > function calcforces(coords,L,np,i) # with np... number of processes i... > current process > for partA = i+1:np:nPart-1 > for partB = (partA+1):nPart > ... > return forces > end > > np = nprocs(); > parad = Array(RemoteRef,np); > > and then calling function calcforces with: > for i=1:np parad[i] = @spawn LJ_Force_MT(coords,L,np,i); end > for i=1:np forces = fetch(parad[i]); end > > both ways are giving me wrong results over more than 1 timestep >
You have multiple parallel loops modifying the forces array. They will be generating races for sure. Cheers Lex
