parfor en matlab. variable en rodajas y bucle anidado
parallel-processing (1)
Hice todo lo posible para seguir la documentación de la caja de herramientas paralela, pero aún así no pude evitar el problema de reutilizar la matriz que estaba indexada en un bucle anidado. El problema es con nodo variable
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
No utilizo la matriz fuera del ciclo anidado, la indexación también está de acuerdo con la regla. ¿ Perdí otra restricción parfor ?
De acuerdo con la documentación, no puede usar diferentes índices como lo hizo:
Dentro del paréntesis o llaves del primer nivel, la lista de índices es la misma para todas las ocurrencias de una variable dada.
Una solución simple es posible:
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
Obtenga una porción de la matriz que contiene todos los índices, trabaje con ella y luego devuélvala.