【问题标题】:Deployed Matlab application using significantly more memory than Matlab scripts使用比 Matlab 脚本更多的内存部署的 Matlab 应用程序
【发布时间】:2013-01-14 19:11:58
【问题描述】:

我正在测试我们在 Matlab 中开发的一个独立应用程序,当时我注意到它的内存使用量(根据 Windows 任务管理器)达到了 16gb 以上的数倍峰值。我决定在编译版本后面的脚本上使用profile -memory on 运行 Matlab 的分析器,以使用完全相同的输入来查看内存峰值出现的位置。然而,它发现的最高峰内存为 2400860.00 Kb,或者大约是该函数的 1/4,该函数基本上充当程序的main()

因此,我想知道人们是否注意到在运行已编译的 Matlab 程序和在 Matlab 中运行原始脚本之间存在巨大的内存使用差异。我注意到在 Matlab 中运行需要更长的时间,但我认为这是由于分析器跟踪所有内存分配和释放,而不是读取和写入磁盘上的交换空间。

【问题讨论】:

  • 只是为了确认一下:两次运行是否使用同一台计算机?我以前没有遇到过这种情况,但也许在编译过程中进行了优化,让几件事同时发生(因此需要更多内存)。也可能是由于控制台模式下对matlab施加的内存限制造成的。最后一个问题:当你在运行另一个进程之前已经占用了 5~10 g ram 时,你会达到什么峰值?
  • 什么版本的matlab?
  • 您以两种不同的方式测量内存。当您运行 profile -memory on 时,任务管理器会报告哪些内存使用情况?

标签: matlab memory matlab-deployment matlab-compiler mcc


【解决方案1】:

真正快速回答这个问题。是的,MATLAB 编译的应用程序的运行开销比 MATLAB 脚本多。

这是因为 MATLAB 部署的应用程序打开了一个 MATLAB 版本,该版本存储在称为 MCR 的内存中。与 MATLAB 相比,MCR 的运行开销更大。

我发现在这种情况下有用的一件事是重新编译并查看是否有帮助。如果没有,您可以尝试通过分段运行计算来降低内存使用量。

这可能有助于更好地使用内存:http://www.mathworks.com/help/matlab/matlab_prog/strategies-for-efficient-use-of-memory.html

来源:

如有问题请留言。

【讨论】:

  • -1:如果您添加指向文档或基准的链接,表明 MCR 确实比在 MATLAB 中运行的开销更大,则将给出 +1。
  • 添加了链接和内存使用帮助。
  • MCR 只是 MATLAB 解释器和必要库的精简版。当您使用 MATLAB Compiler 生成独立应用程序时,它在运行时仍会解释和运行构成原始程序的 M 文件(这些文件实际上已编码并包含在 exe 文件中)。所以在速度方面,应该是一样的(第一次运行提取CTF存档并启动MCR运行时需要更长的时间,就像你在启动MATLAB IDE时看到的延迟一样):undocumentedmatlab.com/blog/speeding-up-compiled-apps-startup。跨度>
  • ..(继续长评论).. 我看不出内存使用量应该有差异的原因(尽管我没有做任何测试来确认这一点)。不过我可能是错的 :) 考虑联系技术支持以获得明确的答案。
  • 我同意联系支持。他们的支持实际上是体面的。但不管你怎么想,MCR 比在 MATLAB 中实际运行要慢。我的建议是切换到另一种语言。一旦您开始编译应用程序,您就超出了 MATLAB 的预期用途,并且将从其他语言中获益。
猜你喜欢
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
相关资源
最近更新 更多