(revised) What is the right way to apply parallel.pool.Constant on functional handle?

8 views (last 30 days)
(original question) I use parfor-loop to process through rows of table/array. In each iteration, a function handle is called to do that. But this leads to a warning message that the function handle is 'a broadcast variabe' and might 'result in unnecessary communication overhead.' Is there a solution to avoid that?
(revised question) I tried parallel.pool.Constant(function_handle), and it generates an error message when calling the function: "Error using [my iteration function]. Unable to use a value of type string as an index." What is the right way to use parallel.pool.Constant(function_handle)?
function res = iteration(f, A)
% f is a function handle
C = cell(height(A),1);
parfor row = 1:height(A)
C{row} = f(A{row,:}); % f is a broadcast variable
end
res = vertcat(C{:});
end
  4 Comments
Walter Roberson
Walter Roberson on 27 Jul 2023
function res = iteration(f, T)
% f is a function handle
C = cell(height(T),1);
%%%%%% adding this line would generate an error message
fh = parallel.pool.Constant(f);
parfor row = 1:height(T)
C{row} = fh.Value(T{row,:});
end
res = vertcat(C{:});
end
Note: see also rowfun
Simon
Simon on 27 Jul 2023
@Walter Roberson Thanks for your help. Glad to learn a new thing. As for rowfun, I used it before but found it was too cumbersome in terms of input arguments. And it does not allow parfor, so I try to make a simpler parfor version for my own usage.

Sign in to comment.

Accepted Answer

Simon
Simon on 27 Jul 2023
I think I found the solution: feval(). It's in the help page of broadcast variable and parfor.
function res = iter_test(f, T)
% f is a function handle
C = cell(height(T), 1);
parfor row = 1:height(T)
C{row} = feval(f, T{row, :});
end
res = vertcat(C{:});
end

More Answers (0)

Categories

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

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!