Because parfor
-loops
are not quite the same as for
-loops, there are
specific behaviors of each to be aware of. As seen from the example
in the topic Create a parfor-Loop,
when you assign to an array variable (such as A
in
that example) inside the loop by indexing with the loop variable,
the elements of that array are available in the client workspace after
the loop, much the same as with a for
-loop.
However,
suppose you use a nonindexed variable inside the loop, or a variable
whose indexing does not depend on the loop variable i
.
Try these examples and notice the values of d
and i
afterward:
clear A d = 0; i = 0; for i = 1:4 d = i*2; A(i) = d; end A d i A = 2 4 6 8 d = 8 i = 4 | clear A d = 0; i = 0; parfor i = 1:4 d = i*2; A(i) = d; end A d i A = 2 4 6 8 d = 0 i = 0 |
Although the elements
of A
come out the same in both of these examples,
the value of d
does not. In the for
-loop
above on the left, the iterations execute in sequence, so afterward d
has
the value it held in the last iteration of the loop. In the parfor
-loop
on the right, the iterations execute in parallel, not in sequence,
so it would be impossible to assign d
a definitive
value at the end of the loop. This also applies to the loop variable, i
.
Therefore, parfor
-loop behavior is defined so that
it does not affect the values d
and i
outside
the loop at all, and their values remain the same before and after
the loop. So, a parfor
-loop requires that each
iteration be independent of the other iterations, and that all code
that follows the parfor
-loop not depend on the
loop iteration sequence.