How to gather results from a parfor loop?
14 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Xiaohan Du
il 23 Nov 2016
Commentato: Joss Knight
il 24 Nov 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 Commento
Joss Knight
il 24 Nov 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.
Risposta accettata
Brendan Hamm
il 23 Nov 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 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Parallel for-Loops (parfor) in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!