我正在尝试在matlab中测试parfor
与for
相比的效果,我构建了简单的function calculates π:
这是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
我有两个问题:
我想在函数中添加一个参数来指示是否 用于或代表最小的代码更改:
即。 :
if (use_par):
parfor k=1:10
else
for k=1:10
end
<--rest of code here-->
如何用最少量的代码编写它?
答案 0 :(得分:1)
parfor
的主要要求是循环执行是独立的。这里显然不是每个迭代都可以更新变量in
。
好消息是,您可以使用in(k)
来解决此问题。
使用一个循环或另一个循环而不使用额外代码的一种方法是将您执行的所有操作放在函数或脚本中,例如doeverything.m
然后写
if (use_par):
parfor k=1:10
doeverything
end
else
for k=1:10
doeverything
end
end