MATLAB Answers

Question about Parfor-loop

1 ビュー (過去 30 日間)
Mar
Mar 2018 年 4 月 11 日
コメント済み: Mar 2018 年 4 月 19 日
I do nonlinear fitting within a nested for loop as shown below:
for i=1:200
for j=1:170
for k=1:50
%do nonlinear fitting
[p,res] = lsqnonlin()
params(i,j,k,1:5)=[p,fix_par(i,j,k),res];
end
end
end
The above loop is extremely slow and I am trying to find ways to speed it up. I've read about the parlour-loop (which I am not familiar at all - I'm new to programming). I tried to use it but I got the following error "The variable params in a parfor cannot be classified." I tried something as below:
parfor i=1:200
parfor j=1:170
parfor k=1:50
%do nonlinear fitting
[p,res] = lsqnonlin()
params(i,j,k,1:5)=[p,fix_par(i,j,k),res];
end
end
end

  3 件のコメント

Adam
Adam 2018 年 4 月 11 日
This page should help.
You cannot use nested parfor loops though, you can only use it on one loop (usually the outer loop is best if it is possible to parallelise at this level). This is intuitive from the fact that if the outer loop is using all workers then the loop nested inside it clearly cannot spread the work to all workers within each worker as they are all already being used.
Steven Lord
Steven Lord 2018 年 4 月 11 日
Why do you need to perform 1.7 million individual fits? Perhaps there's a way to achieve your ultimate goal without calling lsqnonlin almost 2 million times. If you describe what you're trying to do we may be able to offer suggestions about a faster alternative approach.
Mar
Mar 2018 年 4 月 19 日
My data are 4D images with dimensions [200 170 50 31]. I am doing pixel-wise fitting that's why I am calling lsqnonlin so many times. Is there any alternative way to suggest?

サインインしてコメントする。

回答 (0 件)

Community Treasure Hunt

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

Start Hunting!

Translated by