我正在编写一些计算时间很重要的代码。我使用tic toc
函数和profiler
来衡量时间。他们之间有什么区别?
对于我的一段代码,tic toc
函数表示例如时间为3秒,但profiler
中代码的所有行的时间总和不是那么多!
答案 0 :(得分:4)
剖析器非常适合查找代码中的瓶颈,以及比较不同算法的相对时序,但我不相信它能为您提供准确的绝对时间。
首先,使用分析器会禁用许多JIT优化,因此代码可能无法以正常方式运行。
使用tic
和toc
计时可能会非常微妙,因为您需要预热代码并运行几次才能获得平均值。
我建议您使用timeit
代替,它会为您处理所有这些细微之处。在最近的版本中,timeit
是核心MATLAB的一部分。如果您使用的是旧版本,则可以从MATLAB中央文件交换中download it。
答案 1 :(得分:2)
TIC TOC
和profiler
做了很多不同的事情。
TIC TOC测量从TIC呼叫到TOC呼叫所经过的时间。这包括抽动函数本身的一些开销以及非常抱歉的间隔,并不完全可靠。
Profiler测量代码中每个函数执行的cpu时间。这不包括当前没有执行任何功能的停机时间(cpu正在执行其他任务,包括运行matlab代码)。
您还应该做些其他事情来确保准确计算时间:
将代码包装在函数中以确保它是JIT编译的。
在分析之前运行一次预热功能。
多次运行代码并平均时间。
多次运行tic / toc函数,对结果取平均值,然后从总时间中减去该值。
如果可能,在任何循环之外分配数组,而不是追加到数组。