Filter löschen
Filter löschen

Info

Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.

Why can parfor only write to one dimension?

1 Ansicht (letzte 30 Tage)
matt kennedy
matt kennedy am 13 Jun. 2015
Geschlossen: MATLAB Answer Bot am 20 Aug. 2021
Say I have some code like:
index = 1:100;
results = cell(2,length(index));
parfor index
results{1,index} = analysisFunction1( data{index} );
results{2,index} = analysisFunction2( data{index} );
end
I get a "parfor cannot run due to the way variable 'results' is used" error message, although as far as I understand this shouldn't interfere in any way with how parfor works. So why is this restriction in place?
Note that if I comment out the second line everything runs as expected, and it isn't dependent on the data I'm writing only that I mention more than one dimension of results.
Changing it to
parfor index
results(1:2,index) = { Fun1(...) ; Fun2(...) };
end
Gets me a "The variable results in a parfor cannot be classified."

Antworten (2)

Ken Atwell
Ken Atwell am 13 Jun. 2015
From parfor's perspective, "result" is being accessed randomly. Try this instead:
parfor i=index
results1{i} = analysisFunction1( data{i} );
results2{i} = analysisFunction2( data{i} );
end
results = vertcat(results1, results2);
  1 Kommentar
matt kennedy
matt kennedy am 13 Jun. 2015
Your solution is what I ended up implementing, but not ideal in higher or even an arbitrary number of dimensions.
What do you mean by being accessed randomly? Yes a random index is being passed to each worker, but within a single iteration the index is constant. I'm able to write to results(2,index) leaving the first row empty, and I'm able to write to / access the same dimension more than once with no problems.
If I'm able to access the same variable more than once per iteration, they're both valid indices parfor is able to write to, and they're both completely independent of each other, it just seems like parfor is arbitrarily restricting itself.

Walter Roberson
Walter Roberson am 13 Jun. 2015
http://www.mathworks.com/help/distcomp/sliced-variables.html and see the third example set, "The following example on the left does not slice A because the indexing of A is not the same in all places."
What is allowed is
parfor index
t = cell(2,1);
t{1} = analysisFunction1( data{index} );
t{2} = analysisFunction2( data{index} );
results(:,index) = t;
end
or probably
[results{:,index}] = t{:};

Diese Frage ist geschlossen.

Community Treasure Hunt

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

Start Hunting!

Translated by