matlab - MATLAB Cpu 时间 =0 问题
问题描述
我在 MATLAB 中编写了一个函数。在该函数中,我使用:
t = cputime;
...
time = cputime-t;
我在这些点上进行了一些操作。每当我不调用函数而是手动运行函数中的代码时,我总是有时间 = 0.15 等。
但是,在另一个脚本中,我调用了相同的函数。在第一次通话中,它再次给了我时间 = 0.15。但是,如果我清除工作区并再次调用该函数,我有时间 = 0。只有 0,没有小数。我不知道为什么,因为该功能正在工作并给了我想要的东西。如果我多次运行函数中的代码,我永远不会有时间 = 0。
可能的问题是什么?为什么即使清除了工作区,从脚本中多次调用函数也会使其为 0 秒?
解决方案
您应该始终使用该功能timeit
来计时码。其他任何事情充其量都是不准确的。
timeit
首先“预热”系统,然后重复运行代码以获得对所需时间的精确估计。
当要执行的代码很短时,使用cputime
or tic
/toc
会导致测量不精确。时钟的分辨率不足以正确测量它(这就是为什么你可以看到 0 而不是一个非常小的数字),并且测量可能会受到计算机中同时发生的其他事情的影响。
最后,MATLAB 使用 JIT(即时)编译器。函数内的代码在您第一次执行时会被解析和编译一次。随后的时间只是重用编译的代码,因此运行速度更快。
在这方面,我不清楚函数和脚本 M 文件之间的区别。过去的情况是脚本不是 JIT 编译的,只有函数是。但我怀疑这可能在最近版本的 MATLAB 中发生了变化。在任何情况下,直接键入或复制/粘贴到命令提示符的内容都不是 JIT 编译的,因此总是会像第一次运行函数时一样慢。
当您这样做时clear all
,您会从内存中清除预加载和预编译的代码,从而使后续代码运行速度变慢。您通常不应该使用clear all
. 要清除变量,只需执行clear
.
推荐阅读
- ansible - 即使命令语法错误,Ansible iosxr_command 也会保存输出
- python-3.x - 当我尝试使用导入时出错
- python - 如何获得 Hugging Face 预训练模型的大小?
- java - 具有私有构造函数的 MongoDB 配置类
- assert - Selenium IDE - 网站不可用时测试不会失败
- php - 我正在尝试将一些数据插入状态表,但在 Laravel 中出现 SQL 查询错误
- asp.net - 在 ASP.Net Web 服务中使用 wsse:Security
- python - Django super().save 和 get_or_create 冲突
- javascript - 降级 MacBook 上的节点
- java - Spring Boot - 使用属性动态创建原型 Bean