2014-09-13 57 views
1

我在写一些代码,其中计算时间很重要。我使用tic toc函数和profiler来测量时间。他们之间有什么区别?TIC TOC或Profiler

对于我的一段代码,tic toc功能状态,例如时间是3秒,但是我所有代码行的profiler的时间总和并不多!

+0

profiler = cpu时间 – Elior 2014-09-13 10:55:58

+0

在论文和文章中,当测量时间时,cpu时间是多少? – user3482383 2014-09-13 11:00:03

+1

你不应该忘记,运行profiler的脚本或函数比tic和toc需要更多的时间。另外考虑'timeit'作为另一种选择。 – thewaywewalk 2014-09-13 11:12:58

回答

2

TIC TOCprofiler做了非常不同的事情。

TIC TOC测量从TIC呼叫到TOC呼叫的经过时间。这包括一些TIC函数本身的内部开销和非常不好的时间间隔,并不完全可靠。

事件探查器测量代码中执行每个函数的cpu时间。这不包括当前没有执行任何功能的停机时间(CPU正在执行其他任务,包括运行您的matlab代码)。

还有其他的事情你应该做的,以保证时间精确的计算:

  1. 包裹在一个函数的代码,以确保它是JIT编译。

  2. 通过在分析之前运行一次预热功能。

  3. 运行代码多次并平均时间。

  4. 多次运行tic/toc函数,对结果进行平均,然后从总时间中减去该值。

  5. 如果可能,在任何循环外分配数组,而不是追加到数组。

4

分析器非常适合您查找代码中的瓶颈,以及比较不同算法的相对时序,但我不相信它会给您准确的绝对时序。

首先,使用分析器会禁用许多JIT优化,因此代码可能无法以与正常情况相同的方式运行。

tictoc为准的时间可能非常微妙,因为您需要预热代码并运行几次才能取得平均值。

我建议你用timeit来代替,它可以为你处理所有这些细节。最近的版本timeit是核心MATLAB的一部分。如果您使用的是旧版本,您可以从MATLAB Central File Exchange获得download it

+0

正如Sam指出的那样,'timeit()'在提供最准确的代码时间方面做得很好,而且净销售额。 – Oleg 2014-09-13 14:05:22