Hello. I'm working with a very long for-cycle (50x200x200 matrix) and I'd like to use parfor to reduce calculating time. I'm working on a 8 cores pc. Since what I know, the parfor works only if the statements does not depend ones by each other. This is an example of my problem:
a = zeros(3,3);
w = magic(3);
% This works!
parfor i = 1:3
a(1, i) = w(i, i);
end
% Won't work!
parfor i = 1:3
a(i, i) = w(i, i);
end
Why the second one does not work?

 채택된 답변

Edric Ellis
Edric Ellis 2012년 1월 13일

1 개 추천

In the second loop, "a" is not sliced. This help text page describes the restrictions on sliced variables inside PARFOR - but basically the indexing expression for "a" must consist of 1 instance of the loop variable "i", and the remaining subscripts must be constants.
Also note that in the second example, "w" will be broadcast because it cannot be sliced - this means that the whole value of "w" will be sent to each worker; this can be inefficient.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Parallel for-Loops (parfor)에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by