【问题标题】:Strange matlab performance when using editor against command window对命令窗口使用编辑器时出现奇怪的 matlab 性能
【发布时间】:2012-05-08 09:24:10
【问题描述】:

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

我在编辑器中有以下代码

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;

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

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

【问题讨论】:

  • 绝对是一个有趣的问题。另请参阅命令行中tic; fac(n); toc;tic; factorial(n); toc;tic; factorial(n); toc;tic; fac(n); toc; 之间的性能差异。函数调用的顺序似乎有所不同...

标签: performance matlab performance-testing


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    结论:一燕不成夏

    用更多案例扩展您的测试。

    n=200;
    tic;
    for ii=1:1e4
        factorial(n);
    end;
    toc
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-21
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多