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

6 ビュー (過去 30 日間)
Simon
Simon 2023 年 7 月 26 日
コメント済み: Simon 2023 年 7 月 27 日
(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 件のコメント
Walter Roberson
Walter Roberson 2023 年 7 月 27 日
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 2023 年 7 月 27 日
@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.

サインインしてコメントする。

採用された回答

Simon
Simon 2023 年 7 月 27 日
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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

製品


リリース

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by