MATLAB Answers

Understanding parfor restrictions with indexing

41 views (last 30 days)
Henry Shackleton
Henry Shackleton on 17 Jun 2019
Edited: Edric Ellis on 18 Jun 2019
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.

  0 Comments

Sign in to comment.

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

  0 Comments

Sign in to comment.

More Answers (0)

Sign in to answer this question.