unable to classify the variable 'F' in the body of the parfor-loop
    12 views (last 30 days)
  
       Show older comments
    
I was trying to reduce the time taken by parfor and I have tried to calculate F (scatteredInterpolant() ) before the parfor loop
F = scatteredInterpolant(x,y,z,data2(1:len),'linear','linear');
Then, I tried to use interpolant object F inside the parfor loop
   parfor i=1:size(data,2)
       F.Values=data2(1:len)
   end
but the following error was generated 
unable to classify the variable 'F' in the body of the parfor-loop. For more information ,see parallel for loops in MATLAB "SOLVE VARIABLE Classification issues in parfor-loops
0 Comments
Accepted Answer
  Edric Ellis
    
      
 on 13 Apr 2022
        This use of F creates an order depdency between loop iterations. (You're modifying F on each loop iteration). I'm not entirely sure what you're trying to do here, but perhaps you want to do something more like this?
rng('default')
x = -2.5 + 5*rand([50 1]);
y = -2.5 + 5*rand([50 1]);
v = x.*exp(-x.^2-y.^2);
F = scatteredInterpolant(x,y,v);
parfor i = 1:10
    % Make a copy of F
    Ftmp = F;
    % Modify the copy - this is fine
    vnew = x.^2 + y.^2 + i;
    Ftmp.Values = vnew;
    out(i) = F(i, i);
end
disp(out)
0 Comments
More Answers (1)
  zein
 on 13 Apr 2022
        
      Edited: zein
 on 13 Apr 2022
  
      
      2 Comments
  Edric Ellis
    
      
 on 14 Apr 2022
				In the attached code, you still have lines inside the parfor loop that assign to F.Values - lines 95; 100; 105; 109; 114. Even if these lines don't execute at runtime, the parfor analysis must be satisfied that nothing order-dependent could ever happen using static analysis and ignoring the value of opt. It might help to assign Ftmp = F at the start of the loop, and then use that everywhere inside the loop.
See Also
Categories
				Find more on Parallel for-Loops (parfor) in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!