我注意到我第一次运行脚本比第二次和第三次花费的时间要多得多1。提到“热身”in this question没有解释。
为什么代码“预热”后运行速度更快?
我没有在两次调用之间清除所有
2,但是每次函数调用的输入参数都会发生变化。有人知道为什么吗?
<子> 1. 我的驾照是本地的,所以不是驾照检查的问题。
<子>
2. 实际上,如果我clear all
,行为不会改变。
最佳答案
它在第一次后运行得更快的一个原因是很多东西都被初始化一次,它们的结果被缓存起来并在下一次重用。比如在M端,变量可以定义为persistent在可以是 locked 的函数中.这也可能发生在 MEX 上- side的事情。
此外,许多依赖项在第一次加载后会保留在内存中以供重复使用。这包括 M 函数、OOP 类、Java 类、MEX 函数等。这适用于内置和用户定义的。
例如发出以下 command第一次运行脚本之前和之后,然后比较:
[M,X,C] = inmem('-completenames')
注意 clear all
不一定 clear以上所有,更不用说锁定功能了...
最后让我们不要忘记加速器的作用。不是每次调用函数时都解释 M 代码,而是在运行时将其编译成机器代码指令。 JIT 编译仅在第一次调用时发生,因此理想情况下,后续运行目标代码的效率将克服每次运行时重新解释程序的开销。
关于matlab - 为什么 Matlab 在脚本为 "warmed up"后运行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873733/