parforでの、ブロードキャスト変数の一時変数化による高速化が有効な場合は?
    3 views (last 30 days)
  
       Show older comments
    
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 Comments
Answers (0)
See Also
Categories
				Find more on 並列 for ループ (parfor) in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!