2

我可能误解了一些东西..但我希望在编辑器和命令窗口中运行代码是相同的..

我在编辑器中有以下代码

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;

在我运行之前(这叫编译还是执行?)我快速在命令窗口中输入相同的命令。这给了我这个:

奇怪的表演时间

所以突然之间,编辑器中的阶乘函数在性能方面得到了提升。刚刚发生了什么?

4

2 回答 2

2

首先,您尝试测量的计算速度太快,无法获得准确读数。由于系统上的其他进程和活动,它远低于使用 tic/toc 时获得的测量噪声。为了获得更准确的测量,多次重复计算......(我会重复计算,因此需要 10-20 秒)。

其次,以交互方式键入的代码和在脚本中键入的代码之间确实存在差异。我认为 JIT 仅适用于从脚本或函数 m 文件运行的代码,而不适用于在解释器中运行的东西(但我现在正在努力寻找参考 - 如果我找到它,我会添加)。

于 2012-05-09T07:05:42.090 回答
1

您的意思是在命令窗口中运行和从脚本运行之间的运行时间差异?我认为它们是由您的计算机上运行的其他所有东西、matlab 自己的内存管理和其他一些东西引起的......

这里有更详细的解释:http: //www.mathworks.com/matlabcentral/newsreader/view_thread/296850

另一种测量 cpu 所用时间的方法是函数cputime。然而,它的精度较低。因此,请扩展您的测试用例,因为它需要更长的时间(n=2e7 例如阶乘上限为 171)才能看到 cputime 的结果。

结论:一燕不成夏

通过更多案例扩展您的测试。

n=200;
tic;
for ii=1:1e4
    factorial(n);
end;
toc
于 2012-05-08T09:28:54.527 回答