我在写一些代码,其中计算时间很重要。我使用tic toc
函数和profiler
来测量时间。他们之间有什么区别?TIC TOC或Profiler
对于我的一段代码,tic toc
功能状态,例如时间是3秒,但是我所有代码行的profiler
的时间总和并不多!
我在写一些代码,其中计算时间很重要。我使用tic toc
函数和profiler
来测量时间。他们之间有什么区别?TIC TOC或Profiler
对于我的一段代码,tic toc
功能状态,例如时间是3秒,但是我所有代码行的profiler
的时间总和并不多!
TIC TOC
和profiler
做了非常不同的事情。
TIC TOC测量从TIC呼叫到TOC呼叫的经过时间。这包括一些TIC函数本身的内部开销和非常不好的时间间隔,并不完全可靠。
事件探查器测量代码中执行每个函数的cpu时间。这不包括当前没有执行任何功能的停机时间(CPU正在执行其他任务,包括运行您的matlab代码)。
还有其他的事情你应该做的,以保证时间精确的计算:
包裹在一个函数的代码,以确保它是JIT编译。
通过在分析之前运行一次预热功能。
运行代码多次并平均时间。
多次运行tic/toc函数,对结果进行平均,然后从总时间中减去该值。
如果可能,在任何循环外分配数组,而不是追加到数组。
分析器非常适合您查找代码中的瓶颈,以及比较不同算法的相对时序,但我不相信它会给您准确的绝对时序。
首先,使用分析器会禁用许多JIT优化,因此代码可能无法以与正常情况相同的方式运行。
以tic
和toc
为准的时间可能非常微妙,因为您需要预热代码并运行几次才能取得平均值。
我建议你用timeit
来代替,它可以为你处理所有这些细节。最近的版本timeit
是核心MATLAB的一部分。如果您使用的是旧版本,您可以从MATLAB Central File Exchange获得download it。
正如Sam指出的那样,'timeit()'在提供最准确的代码时间方面做得很好,而且净销售额。 – Oleg 2014-09-13 14:05:22
profiler = cpu时间 – Elior 2014-09-13 10:55:58
在论文和文章中,当测量时间时,cpu时间是多少? – user3482383 2014-09-13 11:00:03
你不应该忘记,运行profiler的脚本或函数比tic和toc需要更多的时间。另外考虑'timeit'作为另一种选择。 – thewaywewalk 2014-09-13 11:12:58