parforでの、ブ​ロードキャスト変数の​一時変数化による高速​化が有効な場合は?

4 views (last 30 days)
Yuki Koyama
Yuki Koyama on 15 Jan 2021
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

Answers (0)

Categories

Find more on 並列 for ループ (parfor) in Help Center and File Exchange

Tags

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!