Global variables in parfor loop
조회 수: 57 (최근 30일)
이전 댓글 표시
I am using global variables in parfor loop and I get following m-lint
The code uses a global variable in a parfor loop. Because parfor loops run on several different machines simultaneously, the global workspace might not be the same on each machine. Therefore, using a global variable in a parfor loop could have unpredictable or unexpected results and Code Analyzer flags it as an error.
This is my code:
r=cell(size(sample,1),1);
parfor samp=1:size(sample,1)
theta_opt=theta_opt_array(samp,:);
Cp_opt=diag(Cp_opt_array(samp,:));
beta_opt=beta_opt_array(samp);
sigmaobs2_opt=sigmaobs2_opt_array(samp);
mu=strm(:,samp);
n=10000;
Ct_opt=CovarianceMatrixEstimation(Cp_opt,theta_opt,sigmaobs2_opt,...
GLOBAL_DATA,GEOMORPH); % these two are global variables
r{samp}=mulgennormrnd(n,mu,Ct_opt,beta_opt);
end
Any suggestions on how to fix it? I don't understand the suggested fix by MATLAB. The suggestion by MATLAB is:
Make local copies of the global variables that you want to use within the parfor loop before beginning the parfor loop
Also,I am not changing my global variables in parfor loop.
댓글 수: 0
채택된 답변
Adam Danz
2018년 6월 29일
편집: Adam Danz
2018년 6월 29일
There are lots of reasons not to use global variables at all and this is one of them. As the error message indicates, parfor() is executed in parallel potentially between >1 machine. Global variable are not accessible between machines. So you'll have to initialize them independently within your code.
댓글 수: 6
Steven Lord
2018년 6월 29일
So your mulgennormrnd function needs information from the CovarianceMatrixEstimation call that took place earlier in the same loop iteration (not cross-iteration)?
The simplest approach, and the one that makes it clear that you're not trying to share data across iterations, would be to have your CovarianceMatrixEstimation function return that information as additional outputs and have your mulgennormrnd function accept that information as additional inputs.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Parallel for-Loops (parfor)에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!