parforでの、ブロードキャスト変数の一時変数化による高速化が有効な場合は?
4 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で 並列 for ループ (parfor) についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!