Understanding nested function reference in parfor loop

5 vues (au cours des 30 derniers jours)
Supreeth
Supreeth le 18 Mar 2015
I came accross this sentence in MATLAB doc:
The body of a parfor-loop cannot make reference to a nested function. However, it can call a nested function by means of a function handle.
Can someone please explain what this means?
  2 commentaires
Jason Stockton
Jason Stockton le 19 Oct 2017
Yes, Please. I am having an issue with it now. Thanks.
Jonathan Chin
Jonathan Chin le 19 Oct 2017
Look at this examples where I am creating a function handle for my nested function.
function out=parforTest(in)
out = zeros(1,4);
tmp=@(x)nestedFunc(in,x);
parfor ii=1:4
out(ii)=feval(tmp,ii)
end
function outv= nestedFunc(in,var)
outv = in+var;
end
end

Connectez-vous pour commenter.

Réponses (1)

Himanshu
Himanshu le 10 Déc 2024
Hey,
The sentence mentioned by you from the documentaiton points out a limitation of the 'parfor' loop, which is that it cannot directly reference nested functions within its loop body. Instead, you can call a nested function using a function handle, which is like a reference or pointer to a function. For example:
function mainFunction()
% Nested function
function result = nestedFunction(x)
result = x^2;
end
% Create a function handle
nestedHandle = @nestedFunction;
% Use parfor with the function handle
parfor i = 1:5
results(i) = nestedHandle(i);
end
disp(results);
end
In the code above, inside the parfor loop, you call the nested function using the handle nestedHandle(i). This approach bypasses the restriction, allowing the nested function to be used in parallel computations.
In simple terms, while parfor can't directly use nested functions, creating a function handle allows you to call them indirectly, enabling parallel execution.
Hope this help!

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by