Avoid broadcasting an array in parfor

1 ビュー (過去 30 日間)
dipak sanap
dipak sanap 2022 年 2 月 20 日
コメント済み: dipak sanap 2022 年 2 月 20 日
Hi, I have a matrix (A) and I want to access certain columns of this matrix in for loop. I need some help avoiding the broadcasting the the entire matrix A in the loop when I use parfor. Any help would be useful. I have provided simple working example which is a part of larger code.
A = rand(100,5);
combinations = randi([1 5],100,3);
parfor i=size(combinations,1)
current_comb = combinations(i,:);
current_profile = A(:,current_comb);
end

採用された回答

Raymond Norris
Raymond Norris 2022 年 2 月 20 日
As a side note, I suspect that
parfor i=size(combinations,1)
should be more like
parfor i=1:size(combinations,1)
as the original is a scalar and therefore, the for-loop is a single iteration.
In your example, combinations is a sliced variable; however, A needs to be a broadcast. Using the loop variable, i, MATLAB knows a prior how to break up combinations to each of the workers. On the other hand, indexing into A is not known until we know the value of current_comb (at runtime). To provide this flexibleness, MATLAB needs to send all of A as a broadcast variable.
It might help to look at ticBytes and tocBytes to get a sense of how much data is being sent back and forth.
  3 件のコメント
dipak sanap
dipak sanap 2022 年 2 月 20 日
Hi, thanks Raymond. Yeah, it was just a pesudo code. I dont actully use rand to generate combinations and they can not be done in par loop. But, thanks I just wanted to make sure that creating A_combs was correct approch. I would go ahead with this strategy.

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

その他の回答 (0 件)

Community Treasure Hunt

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

Start Hunting!

Translated by