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);


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