【问题标题】:Growing memory usage in MATLABMATLAB 中的内存使用量不断增长
【发布时间】:2014-09-05 09:03:01
【问题描述】:

我使用 MATLAB 来编写一些元启发式算法。最近,我一直在研究解决工业工程问题的算法。我对 MATLAB 的问题是出现“内存不足”错误。现在我正在尝试来自 Mathworks 和 Stackoverflow 的一些建议(希望它们会起作用)。然而,有一件事我不明白。

在 MATLAB 中运行算法期间(中等规模的问题需要 4000-5000 cpu sec),即使我预先分配变量,代码也不需要动态数组调整大小并且不添加新变量,我观察到算法的内存使用量不断增长。主函数调用了我写的其他一些函数。内存使用量增加的原因可能是什么?

我用来运行算法的电脑有8GB内存,安装了win8 64bit。

【问题讨论】:

  • 算法的空间复杂度是多少?
  • 如果所有其他方法都失败,请考虑(以编程方式)在固定数量的循环后重新启动 matlab。每次需要几秒钟,但这是清除内存的最有效方法。 (你可能需要在某个地方保存一个变量来记住你走了多远。)​​
  • 你在调用任何 mex 文件吗?我之前通过 mex 遇到过内存泄漏问题。

标签: matlab memory


【解决方案1】:

解决这个问题的唯一方法是查看内存的去向。 我认为您可能会意外存储不需要的结果,或者您低估了输出/中间变量的大小。

这是我将如何进行的:

  1. 开启dbstop if error
  2. 运行代码直到出现内存不足错误
  3. 查看正在使用多少内存(确保检查所有工作空间)

您现在可能知道额外内存的去向了。如果您发现没有使用太多内存,请继续:

  1. 检查memory 命令查看还有多少内存可用
  2. 仔细查看正在执行的行,也许您实际上需要大量内存来处理它

如果所有其他方法都失败了,请在此处分享您的发现,其他人可以帮助您查找。

【讨论】:

  • 谢谢丹尼斯!我会尽快分享结果
  • 在第一篇文章中我忘了提到我在循环中使用了 cplexlp.m 数十万次。我检查了工作区(如您建议的那样),但找不到任何不自然的东西(总工作区大小甚至低于 100 MB)。我用谷歌搜索了 -matlab+cplex+memory+error- 并找到了一些建议(我认为这是由于 cplexlp.m)。现在我尝试“清除 cplexlp;”每次调用 cplexlp 之后...我正在等待结果。
  • @HByrm 期待你的结论。如果它有效但性能受到太大影响,请考虑每 1000 次左右清除一次。
  • "clear cplexlp" 命令不起作用。根据一些建议,我在计算机的高级系统设置中添加了“MKL_DISABLE_FAST_MM”环境变量。但它没有用。我使用了 linprog,它可以工作,但运行时间显着增加。我很无奈。
【解决方案2】:

内存使用量增长的原因是 CPlex。我尝试了许多替代方案,但除了将虚拟内存增加到数百 GB 之外,我找不到任何其他有用的解决方案。如果您没有特殊理由坚持使用 CPlex(商业用途、许可等),我建议遇到此问题的任何人使用 GUROBI。它是免费且无限制的学术用途,可与 MATLAB 完全集成。这就是我为我的 Cplex 问题找到的解决方案。我希望这个解决方案适用于所有人。

【讨论】:

    猜你喜欢
    • 2017-11-09
    • 2013-10-08
    • 1970-01-01
    • 2014-02-25
    • 2013-08-27
    • 1970-01-01
    • 2019-09-08
    • 2017-09-17
    • 2012-08-20
    相关资源
    最近更新 更多