我正在尝试测试与matlabparfor
相比的效果,我构建了简单的函数来计算 π: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
我有两个问题:
- 为什么两者都需要大约相同的时间?(与此处显示的不同)
我想在函数中添加一个参数,指示是使用 for 还是 parfor ,而代码的变化最小:
IE :
if (use_par): parfor k=1:10 else for k=1:10 end <--rest of code here-->
如何用最少的代码编写它?