reading and writing a cell array in a parfor loop

46 Ansichten (letzte 30 Tage)
Moritz H
Moritz H am 9 Aug. 2016
Kommentiert: Moritz H am 10 Aug. 2016
Hey!
I just came across this and I don't quite understand it. Why is MATLAB complaining about dependencies in different loop iterations when I do something like this:
%minimum working example:
a = cell(100,2);
%fill first row with values;
a(:,1) = {ones(1,1)};
%c = a;
parfor i=1:size(a,1)
b = a{i,1}(1) + 2;
a{i,2} = b;
end
Why can't I read the row I am working on prior to writing in it? I am using the same i every time... Do I really have to copy the whole array to c and read from that to run this parallel?
Thank you!

Akzeptierte Antwort

Edric Ellis
Edric Ellis am 10 Aug. 2016
One of the restrictions of parfor is that for a sliced variable, you need to use precisely the same form of indexing each time you use that variable. This is described in the doc. To fix this, you need to make a slight change to ensure that you always index into a using a fixed index listing, like so:
parfor i=1:size(a,1)
arow = a(i,:);
b = arow{1}(1) + 2;
arow{2} = b;
a(i,:) = arow;
end
  1 Kommentar
Moritz H
Moritz H am 10 Aug. 2016
nice, thank you! I didn't know I had to use the exact same indexing. I thought, operating on the same row would be enough...

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by