【问题标题】:How to avoid memory leaks when MATLAB function inside parfor generates warning?parfor中的MATLAB函数生成警告时如何避免内存泄漏?
【发布时间】:2017-03-31 16:19:53
【问题描述】:

我将 matlab R2015b 用于带有本地 parpool 的 Win Server 2012 操作系统。当 parfor-loop 内的函数生成警告时,本地工作人员出现内存泄漏。 parfor-loop 结束后也不会释放内存。示例:

x = rand(78, 1);
for j = 1:100
    parfor i = 1:1000
        [~, z] = kpsstest(x);
    end
end

函数 kpsstest 生成警告:

警告:测试统计量 #1 低于列表的临界值: 报告的最大 p 值 = 0.100。 在 kpsstest>getStat(第 632 行) 在 kpsstest(第 291 行)

即使在我使用结构时,工人的内存也会泄漏:

   warning('off', 'econ:kpsstest:StatTooSmall');
   pctRunOnAll warning('off', 'econ:kpsstest:StatTooSmall')

关于启动工人的记忆:

执行代码后的内存:

parfor中的函数产生警告时如何避免内存泄漏?

谢谢。

【问题讨论】:

    标签: matlab memory-leaks parfor


    【解决方案1】:

    这个问题是这个bug report 的主题。如果您能够升级到 R2017a,这是最简单的解决方法。

    【讨论】:

      【解决方案2】:

      好吧,这可能不是最干净的方法,但您可以关闭并行池,请参阅here

      【讨论】:

      • 很明显重启parpool会返回初始内存消耗。在该示例中,内存泄漏约为 60 MB,但是当我需要在本地集群上长时间处理具有许多生成警告的功能时,内存泄漏可能达到数百 MB 甚至一个 GB。我认为这不是 MATLAB 的正常行为。
      • @JonasVilks 我完全同意。对于此类问题,这可能是错误的论坛。考虑询问here。如果您找到答案,请在此处发布(并链接我,以便我收到查看此页面的通知)
      猜你喜欢
      • 2016-11-17
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多