如何基准Matlab的流程?(How to benchmark Matlab processes?)

2019-07-17 10:52发布

搜索一个想法如何避免我的Matlab代码使用循环,我发现下面的评论下, 在SE一个问题 :

声明“的循环是在Matlab慢”不再普遍适用的,因为Matlab的... euhm,R2008a?

你是否尝试过基准for循环VS你已经拥有? 有时它是比量化代码快...

所以我想问一下, 有没有常用的测试在Matlab进程的速度呢 ? 用户可以看到某处的过程需要多少时间或唯一的办法就是几分钟的流程扩展 ,以相互之间的时间比较?

Answer 1:

用于测试的MATLAB代码的性能最好的工具就是史蒂夫Eddins' timeit功能, 可以在这里从MATLAB中央文件交换。

它处理与基准MATLAB代码给你很多细微的问题,如:

  • 确保JIT编译用于通过在函数包裹所述基准码
  • 热身代码
  • 运行代码几次,平均

更新:由于发布R2013b的, timeit是MATLAB核心的一部分。


更新:由于发布R2016a的,MATLAB还包括性能测试框架来处理你以类似的方式对上述问题timeit



Answer 2:

您可以使用分析器来评估多少时间你的函数和代码在其中的块,正在服用。

>> profile on; % Starts the profiler
>> myfunctiontorun( ); % This can be a function, script or block of code
>> profile viewer; % Opens the viewer showing you how much time everything took

浏览器还会清除下一次当前的配置文件数据。

请记住,资料中趋于缓慢执行了一点,但我相信它在跨越一切以统一的方式这样做。

显然,如果你的函数是非常快的,你可能会发现你没有得到可靠的结果,所以如果你可以运行许多次或延长,将提高问题的计算。

如果它真的很简单的东西,你要测试,你也可以只是它的使用时间tictoc

>> tic; % Start the timer
>> myfunctionname( );
>> toc; % End the timer and display elapsed time

此外,如果你想要多个定时器,可以将它们分配给变量:

>> mytimer = tic;
>> myfunctionname( );
>> toc(mytimer);

最后,如果你想存储所经过的时间,而不是显示它:

>> myresult = toc;


Answer 3:

我认为我是对的国家,我们许多的时间Matlab的通过包装的代码块我们之间感兴趣的tictoc 。 此外,我们小心确保总时间为秒(而不是秒1秒或秒100秒)10秒的量级,并重复其3 - 5倍,并采取集中趋势的一些测量(例如平均值)并从中得出我们的结论。

如果一段代码只需不到,说10秒,然后根据需要重复多次,使其范围内,小心避免一次迭代对未来产生任何影响。 如果代码时,自然需要几秒钟或更长的时间100S,要么花费更长的测试或人为小的输入数据的尝试更快地运行。

根据我的经验,没有必要运行方案分钟到可接受的低方差得到平均运行时间数据。 如果我运行一个程序5次,结果中的一个(或两个)是从平均,我会非常不同的重新运行它。

当然,如果代码中有这使得它的运行时间不确定性的任何功能则是另一回事。



文章来源: How to benchmark Matlab processes?