如何使 Matlab 程序执行得更快?

如何使 Matlab 程序执行得更快?

有没有什么技术可以使 MATLAB 代码执行得更快?

我说的是可以让我的电脑运行更快的东西(比如停止一些 .exe 或软件以提高电脑性能)。我注意到有时我的电脑在两个不同的时间运行相同的任务:例如,他可以在 45 秒内运行一个程序,然后在 10 分钟内再次运行同一个程序。

答案1

是您的计算机上的 MATLAB 运行缓慢,还是您用 MATLAB 编写的程序运行缓慢?

MATLAB 大量使用动态内存分配和重新分配;矩阵或数组大小调整可能非常缓慢且不确定;如果矩阵或数组增长,则会分配新内存并将现有数据复制到新内存,然后再删除旧副本。您可以通过预分配此类数组来避免这种内存抖动:例如此代码:

x = 0;
for k = 2:1000
   x(k) = x(k-1) + 5;
end

导致x每次迭代都会调整大小,并且运行速度非常慢。相比之下,以下代码:

x = zeros(1, 1000);
for k = 2:1000
   x(k) = x(k-1) + 5;
end

预先分配数组,以便不会发生调整大小并且运行速度会更快。

MathWorks 网站有一个整頁详细介绍这一技术和其他性能改进技术;该页面涵盖以下内容:

  • 预分配数组
  • 对大型数据集使用分布式数组
  • 如果可能的话,用 parfor 替换 for (并行 for)
  • 限制大小和复杂性
  • 分配给变量
  • 使用适当的逻辑运算符
  • 重载内置函数
  • 函数通常比脚本更快
  • 加载和保存比文件 I/O 函数更快
  • 向量化循环
  • 避免大型后台进程

请注意,您建议的解决方案位于 MathWorks 列表的最后,您应该首先查看所有其他要点,除非您正在做一些明显耗费资源的事情,例如运行虚拟机,或者在运行 MATLAB 的同时播放高清视频,否则查看其他正在运行的进程可能会为小事烦恼。

答案2

遵循 Clifford 的建议后,您可以使用 MATLAB 分析工具检查程序花费最多时间的地方,通常不会有太多行/函数。然后专注于优化这些行。

答案3

如果您的代码的运行时间变化很大,那么很可能您遇到了一个问题,即有时在某种程度上您会接近虚拟内存。当 MATLAB 必须使用交换空间时,速度会急剧下降。毕竟,您正在使用磁盘空间来替代物理 RAM 的可用性。这是我能给出的最佳理由,因为代码在不同运行中的时间变化幅度相差一个数量级。

使用分析器工具来确定时间都花在了哪里。仔细查看这些行。您是否正在创建一个大型数组,即使这只是在您调用的某个函数中临时完成的?

检查您的系统。查看发生这种情况时,CPU 是否在磁盘访问繁忙时基本处于空闲状态。

当然,如果正如我所建议的,那么解决方案也是合乎逻辑的。

  • 让你的算法在内存方面更加高效。这总是一件好事。

  • 如果您当前的 RAM 少于 2GB,请获取更多。

  • 使用 64 位版本的 MATLAB 并获取更多 RAM。

答案4

我认为,这一定是系统范围内的资源瓶颈,如磁盘访问或内存交换问题。尝试看看会出现什么情况进程探索器,您可能会发现系统中正在发生什么事情。

相关内容