How to gather results from a parfor loop?
17 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Xiaohan Du
el 23 de Nov. de 2016
Comentada: Joss Knight
el 24 de Nov. de 2016
Hi all,
I'm new to parallel computing in MATLAB, please forgive my simple question.
I have a test code like this, while I'd like to extract the otpt matrix at 10000th iteration:
inpt = rand(5);
parfor i = 1:10000
otpt = sin(inpt);
end
After running this paralleled code, no error appears, but if I call otpt:
>> otpt
Undefined function or variable 'otpt'.
What if I need the value of otpt?
I did something like this:
inpt = rand(5);
temp = zeros(5);
parfor i = 1:10000
otpt = sin(inpt);
if i == 10000
temp = temp + otpt;
end
end
In this way I can extract the value of otpt at 10000th iteration, but intuitively I do not feel this is correct. So how can I get the value of otpt?
Thank you!
1 comentario
Joss Knight
el 24 de Nov. de 2016
If you need the result from a loop then either you need a result from every iteration, in which case you need to assign into an array that you've initialised before the loop; or your loop is not parallelizable because each iteration depends on the one before - in which case you can't use parfor.
Respuesta aceptada
Brendan Hamm
el 23 de Nov. de 2016
The issue here is that otpt is assigned separately on each of the workers, this makes its classification as a temporary variable. If you would like to access the values afterwards you would want to assign to a reduction or a slicing variable. What you did in the second example is perfectly acceptable, although the example is unrealistic as why use a parfor loop if you only care about the result at a specific iteration?
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Parallel for-Loops (parfor) en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!