0

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 つの質問があります。

  1. 両方ともほぼ同じ時間がかかるのはなぜですか? (ここに示したものとは異なります)
  2. 関数に引数を追加して、最小限のコード変更で for または parfor を使用するかどうかを示したいと思います。

    すなわち:

    if (use_par):
        parfor k=1:10
    else
       for k=1:10
    end
    
    <--rest of code here-->
    

    最小限のコードでどのように記述できますか?

4

1 に答える 1