parfor in matlab. sliced variable and nested loop
I did my best to follow the documentation of the parallel toolbox, but still I could not avoid the problem of reusing array that was indexed in a nested loop. The problem is with variable node
parfor i=1:nX
for j=1:nY
[ind,dist]=findInCircle(node(i,j,:), part,r);
UV=calcVelocity(part(ind,:), dist,node(i,j,:)) ;
%here matlab complains that node is not indexed properly
node(i,j,3)= UV(1);
node(i,j,4)= UV(2);
node(i,j,5)= UV(3);
end
end
I do not use the array outside of the nested loop, the indexing is also according to the rule. Did I miss another parfor restriction?
Solution 1:
According to the documentation you can not use different indices like you did:
Within the first-level parenthesis or braces, the list of indices is the same for all occurrences of a given variable.
A simple workaround is possible:
parfor i=1:nX
nodeSlice=node(i,:,:)
for j=1:nY
[ind,dist]=findInCircle(nodeSlice(j,:), part,r);
UV=calcVelocity(part(ind,:), dist,nodeSlice(j,:)) ;
%here matlab complains that node is not indexed properly
nodeSlice(j,3)= UV(1);
nodeSlice(j,4)= UV(2);
nodeSlice(j,5)= UV(3);
end
node(i,:,:)=nodeSlice;
end
Get a slice from the matrix which contains all indices, work with it and then return it.