Ste*_*fin 19 benchmarking matlab warm-up
我注意到第一次运行脚本时,它比第二次和第三次需要更多的时间1.在没有解释的情况下,在这个问题中提到了 "热身" .
为什么代码在"预热"后运行得更快?
我不在clear all
调用2之间,但每个函数调用的输入参数都会改变.有人知道为什么吗?
1.我在本地获得了许可证,因此这不是与许可证检查有关的问题.
实际上,如果我,行为不会改变clear all
.
它在第一次运行之后运行得更快的一个原因是许多事情被初始化一次,并且它们的结果被缓存并在下次重用.例如,在M侧,变量可以被定义为可以锁定的函数中的持久性.这也可能发生在MEX - 侧的东西.
此外,许多依赖项在第一次之后加载,并在内存中保留以便重新使用.这包括M函数,OOP类,Java类,MEX函数等.这适用于内置和用户定义的内容.
例如,在第一次运行脚本之前和之后发出以下命令,然后比较:
[M,X,C] = inmem('-completenames')
Run Code Online (Sandbox Code Playgroud)
注意,clear all
并不一定清楚以上所有内容,更不用说锁定功能......
最后,让我们不要忘记加速器的作用.每次调用函数时,它都不是在解释M代码,而是在运行时编译成机器代码指令.JIT编译仅在第一次调用时发生,因此理想情况下,以下时间运行目标代码的效率将克服每次运行时重新解释程序的开销.