matlab でのparfor
比較の効果をテストしようとしています。単純な関数を作成して π を計算します。for
ここに関数がありますparfor
:
function [calc_pi,epsilon] = calcPi(max)
format long;
in = 0;
tic
parfor k=1:max
x = rand();
y = rand();
if sqrt(x^2 + y^2)<1
in = in + 1;
end
end
toc
calc_pi = 4*in/max;
epsilon = abs(pi - calc_pi);
end
私はそれを実行しparfor
、この出力を得ました:
>> [calc,err] = calcPi(1000000000)
Elapsed time is 92.2923 seconds.
calc =
3.141638468000000
err =
4.581441020690136e-05
>>
私が持ってきたforループで:
>> [calc,err] = calcPi(1000000000)
Elapsed time is 121.3432 seconds.
calc =
3.141645132000000
err =
5.247841020672439e-05
2 つの質問があります。
- 両方ともほぼ同じ時間がかかるのはなぜですか? (ここに示したものとは異なります)
関数に引数を追加して、最小限のコード変更で for または parfor を使用するかどうかを示したいと思います。
すなわち:
if (use_par): parfor k=1:10 else for k=1:10 end <--rest of code here-->
最小限のコードでどのように記述できますか?