matlab - 为什么 Matlab 在脚本为 "warmed up"后运行得更快?

标签 matlab benchmarking warm-up

我注意到我第一次运行脚本比第二次和第三次花费的时间要多得多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/

相关文章:

c++ - Matlab 语法帮助。'*

java - 具有图形输出的轻量级微基准库 (Java)

html - 使用 IIS ApplicationInitialization remapManagedRequestsTo 功能时返回用于提供静态 html 的自定义响应代码?

sql-server - Entity Framework 6.2数据库第一次预热

image - 将图像映射成圆柱体或球体形状?

matlab - 找到最大和最小数之间的数字并生成该范围内的随机整数

android - MATLAB 在从加速度到速度到位置进行积分时,我得到了非常高的 y 值

performance - 来自 monad 变压器基准测试的奇怪结果。一个错误?

python - 为什么 Python 中的局部变量访问比类成员访问更快?

asp.net - 不重新映射请求的ASP.NET Web服务的IIS 7.5应用程序初始化(预热)