How to resolve warning message about broadcast variable while using 'parfor'?
    9 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Atanu
 am 14 Jul. 2024
  
    
    
    
    
    Kommentiert: Atanu
 am 16 Jul. 2024
            males = {'animal1', 'animal2', 'animal3'};
treatmentGrps = {'T1', 'T2', 'T3'};
nrows = size(featureLists, 1);
ncols = size(featureLists, 2);
featureLists = cell(nrows, ncols);
parfor grp = 1:nrows
    tempRow = cell(1, ncols);
    for animal = 1:ncols
        tempRow{animal} = individualPsychValuesPerSession('approachavoid', ...
            treatmentGrps{grp}, males{animal});
    end
    featureLists(grp, :) = tempRow;
end
    When I use 'parfor' like above I get an warning message 
The entire array or structure 'males' is a broadcast variable.
This might result in unnecessary communication overhead.
But, when I change 'ncols' to 'numel(males)' like following
for animal = 1:numel(males)
    tempRow{animal} = individualPsychValuesPerSession('approachavoid', ...
        treatmentGrps{grp}, males{animal});
end
for the inner loop I don't get any warning.
Can someone please explain this behavior of 'parfor'?
0 Kommentare
Akzeptierte Antwort
  Edric Ellis
    
      
 am 15 Jul. 2024
        I think you should ignore this message in this case. It looks like you really need all the values of males for each iteration of the parfor loop, and that's OK. The message is there to warn about cases where the data is being "accidentally" broadcast.
The fact is that the array males is very small (in terms of bytes), so it should not cause significant overhead. You can check using whos to see the size of the array in the workspace, and also use ticBytes and tocBytes to see how much data is being transferred to run the loop. My bet is that the overall data transfer is not being significantly changed by the size of males.
Weitere Antworten (1)
  Drew
    
 am 14 Jul. 2024
        
      Bearbeitet: Walter Roberson
      
      
 am 14 Jul. 2024
  
      See https://www.mathworks.com/help/parallel-computing/broadcast-variable.html  It includes an example with numel().
If this answer helps you, please remember to accept the answer
2 Kommentare
  Walter Roberson
      
      
 am 14 Jul. 2024
				It was due to the ending period being interpreted as part of the URL. I have corrected the link.
Siehe auch
Kategorien
				Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



