MATLAB Cpu时间= 0问题

时间:2019-06-22 15:34:09

标签: matlab function time cpu-time

我已经在MATLAB中编写了一个函数。在该函数中,我使用:

t = cputime;
...
time = cputime-t;

我在点上有一些操作。每当我不调用该函数而是手动运行该函数中的代码时,我总会得到时间= 0.15等。

但是,在另一个脚本中,我正在调用相同的函数。在第一个电话中,它再次给了我时间= 0.15。但是,如果我清空工作区并再次调用该函数,则我的时间=0。只有0,没有小数。我不知道为什么,因为该功能可以正常工作并提供我想要的东西。 如果我改为多次运行函数中的代码,则我永远不会有时间=0。

可能的问题是什么?为什么即使清除了工作空间,也多次从脚本调用一个函数会使它变为0秒?

1 个答案:

答案 0 :(得分:3)

您应该始终使用函数timeit来计时代码。其他任何事情充其量都是不准确的。

timeit首先“预热”系统,然后重复运行代码以准确估算其花费的时间。

当要执行的代码很短时,使用cputimetic / toc会导致测量不精确。时钟的分辨率不足以正确地对其进行测量(这就是为什么您可以看到0而不是一个很小的数字)的原因,并且同时受到计算机中其他事物影响的测量结果。 / p>

最后,MATLAB使用JIT(即时)编译器。第一次执行函数时,将解析并编译函数中的代码。随后,只需重复使用已编译的代码,即可运行得更快。

在这方面,我不清楚函数和脚本M文件之间的区别。过去的情况是脚本不是JIT编译的,只有函数是。但是我怀疑这在最新版本的MATLAB中可能已经改变。在任何情况下,直接键入或复制/粘贴到命令提示符中的内容都不是JIT编译的,因此,它总是和第一次运行函数时一样慢。

当您执行clear all时,会从内存中清除预加载和预编译的代码,从而使后续代码的运行速度变慢。通常,您不应该使用clear all。要清除变量,只需执行clear