parforでの、ブロードキャスト変数の一時変数化による高速化が有効な場合は?
    3 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
parforでの、ブロードキャスト変数の一時変数化による高速化が有効な場合はどのような場合でしょうか?
たとえば、こちらのドキュメンテーション(https://jp.mathworks.com/help/parallel-computing/broadcast-variable.html)では、
ブロードキャスト変数によるオーバーヘッドが速度低下の原因になる可能性があり、
したがってブロードキャスト変数を一時変数とすると効率的になる場合がある、と述べられています。
そこで以下のようなコードで試したところ、予想とは反対に、ブロードキャスト変数を用いたほうが5倍ほど高速でした。
%%ブロードキャスト変数を用いる場合(実行時間3秒ほど)
tic
a=1:1e6;
parfor i=1:10000
   z=sum(a(:));
end
toc
%%一時変数とした場合(実行時間15秒ほど)
tic
parfor i=1:10000
   a=1:1e6;
   z=sum(a(:));    
end
toc
今回はなぜブロードキャスト変数としたほうが高速だったと考えられるでしょうか?
また、どのような場合ならば一時変数化により高速になるでしょうか?
ワーカー数は8の環境で実行しました。
-------
ProcessPool のプロパティ: 
            Connected: true
           NumWorkers: 8
              Cluster: local
        AttachedFiles: {}
    AutoAddClientPath: true
          IdleTimeout: 30 分 (残り 30 分)
          SpmdEnabled: true
0 Kommentare
Antworten (0)
Siehe auch
Kategorien
				Mehr zu 並列 for ループ (parfor) 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!