Info
This question is closed. Reopen it to edit or answer.
Why can parfor only write to one dimension?
1 view (last 30 days)
Show older comments
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."
0 Comments
Answers (2)
Ken Atwell
on 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 Comment
Walter Roberson
on 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{:};
0 Comments
This question is closed.
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!