我可能误解了一些东西..但我希望在编辑器和命令窗口中运行代码是相同的。
我在编辑器中有以下代码
display(' ');
display('script');
fac = @(n) prod(1:n);
n=20;
display(['- use of anonymous function: fac = @(n) prod(1:n); with n = ' num2str(n)]);
tic; fac(n); toc;
display(['- use of build in MatLab function: factorial(); with n = ' num2str(n)]);
tic; factorial(n); toc;
在我运行之前(被称为编译或执行?)我在命令窗口中快速输入相同的命令。这给了我这个:
因此,在性能方面,编辑器中的阶乘函数突然得到了提升。刚刚发生了什么?
答案 0 :(得分:2)
首先,您要测量的计算速度太快,无法获得准确的读数。由于系统上的其他过程和活动,它低于使用tic / toc时的测量噪音。为了获得更准确的测量,重复计算多次...(我会重复计算,因此需要10-20秒)。
其次,交互式和脚本中的代码确实存在差异。我认为JIT只运行从脚本或函数m文件运行的代码,在那里而不是在解释器中运行的东西(但我现在很难找到它的参考 - 如果我找到它,我会添加)。 / p>
答案 1 :(得分:1)
你的意思是在命令窗口中运行和从脚本运行之间的运行时间差异?我认为它们是由计算机上运行的其他东西,matlab自己的内存管理和其他一些东西造成的......
这里有更详细的解释:http://www.mathworks.com/matlabcentral/newsreader/view_thread/296850
另一种测量cpu花费时间的方法是函数cputime。但精度较低。因此,扩展您的测试用例需要更长的时间( n = 2e7,例如 factorial上限为171)才能看到cputime的结果。
结论:一只燕子不是夏天制造的
使用更多案例扩展您的测试。
n=200;
tic;
for ii=1:1e4
factorial(n);
end;
toc