相关的时间概念
- 挂钟时间(wall-clock time)
又称流逝时间(elapsed time)或响应时间(response time)
除了计算时间外,包括各种额外的时间(比如代码中有 pause 函数部分,则实际暂停时间也会计入挂钟时间) - 计算时间(CPU time)
程序实际占用计算资源的时间
tic / toc
tic 和 toc 是比较直接的记录挂钟时间的方法。
自 R2008b 起支持嵌套使用,但在其附近的版本中嵌套使用,可能造成额外的开销以致测出不准的数据。[1][2]2011年前后,团队更改了这组函数的底层实现,可以提供微秒精度的数据。[2]2020年的文档中未见嵌套造成额外开销的说明,可能已经解决了相应问题。
如果代码单次运行时间<0.1秒,则建议测量多次运行的时间后,取中位数/平均值。[3]
timeit
timeit 对函数测量挂钟时间,对传入的函数句柄进行多次运行,取运行时间的中位数。
不应在被测函数中调用 tic / toc / timeit,也不应在 tic 与 toc 之间使用 timeit。[4]
cputime
cputime 测量计算时间。
profile
profile 是编辑器界面的 Run and Time(运行并计时)的对应函数,可在四种 timer 中进行切换。[5]
- performance
默认 timer,挂钟时间,由操作系统提供,类似 tic/toc - processor
挂钟时间,由 CPU 提供,可能因节能设置等原因而不准确 - real
挂钟时间,由操作系统提供,开销最大,且系统时间修改时会被影响 - cpu
计算时间,会汇总所有线程上进程占用的时间
参考
- ^Nested Timing https://blogs.mathworks.com/loren/2009/01/06/nested-timing/
- ^abImprovements to tic and toc Functions for Measuring Absolute Elapsed Time Performance in MATLAB https://www.mathworks.com/company/newsletters/articles/improvements-to-tic-and-toc-functions-for-measuring-absolute-elapsed-time-performance-in-matlab.html
- ^Measure the Performance of Your Code https://www.mathworks.com/help/matlab/matlab_prog/measure-performance-of-your-program.html
- ^timeit https://www.mathworks.com/help/matlab/ref/timeit.html
- ^profile https://www.mathworks.com/help/matlab/ref/profile.html