How to gather results from a parfor loop?

조회 수: 24(최근 30일)
Xiaohan Du
Xiaohan Du 2016년 11월 23일
댓글: Joss Knight 2016년 11월 24일
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
Joss Knight
Joss Knight 2016년 11월 24일
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.

댓글을 달려면 로그인하십시오.

채택된 답변

Brendan Hamm
Brendan Hamm 2016년 11월 23일
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개)

Community Treasure Hunt

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

Start Hunting!

Translated by