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!