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

10 vues (au cours des 30 derniers jours)
(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 commentaires
Walter Roberson
Walter Roberson le 27 Juil 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 le 27 Juil 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.

Connectez-vous pour commenter.

Réponse acceptée

Simon
Simon le 27 Juil 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

Plus de réponses (0)

Catégories

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

Produits


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by