Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

Why can parfor only write to one dimension?

1 visualización (últimos 30 días)
matt kennedy
matt kennedy el 13 de Jun. de 2015
Cerrada: MATLAB Answer Bot el 20 de Ag. de 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."

Respuestas (2)

Ken Atwell
Ken Atwell el 13 de Jun. de 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 comentario
matt kennedy
matt kennedy el 13 de Jun. de 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 el 13 de Jun. de 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{:};

La pregunta está cerrada.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by