Understanding nested function reference in parfor loop

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 Comments

Yes, Please. I am having an issue with it now. Thanks.
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

Sign in to comment.

Answers (1)

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!

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Asked:

on 18 Mar 2015

Answered:

on 10 Dec 2024

Community Treasure Hunt

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

Start Hunting!