Understanding parfor restrictions with indexing

75 views (last 30 days)
I was attempting to parallelize a for loop in MATLAB with parfor, and came across a strange restriction with regards to indexing. Specifically, the fact that you seemingly cannot use more than one different index into a variable. For example, something like
parfor ii=1:10
A(ii, 1) = 1;
A(ii, 2) = 2;
end
does not work, whereas the code
parfor ii=1:10
A(ii, :) = [1,2]
end
does. Why is this the case? I can make my code accomodate this restriction, but I can't understand why it's necessary. The two different methods seem equivalent to me with respect to being able to cause unintended side effects in parfor.

Accepted Answer

Edric Ellis
Edric Ellis on 18 Jun 2019
Edited: Edric Ellis on 18 Jun 2019
The indexing restrictions in parfor range from those which are required to make the loop iterations provably order-independent (well... modulo non-standard implementations of subsref or subsasgn), to those which are limitations of the implementation. In this case, you have two indexing expressions either of which on its own would constitute a valid "slicing" operation, but the current implementation cannot support that.
Also note that the following is allowed:
parfor ii=1:10
for jj = 1:2
A(ii, jj) = jj;
end
end

More Answers (0)

Categories

Find more on Parallel for-Loops (parfor) in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!