【问题标题】:Parallel pool in Matlab shut down due to error?Matlab中的并行池由于错误而关闭?
【发布时间】:2015-11-15 11:33:25
【问题描述】:

我正在尝试在 Matlab-r2014b 中使用 12 个并行工作程序和 parfor 执行代码。我可以这样做,因为我使用的机器有 12 个内核。

但是,当我开始运行代码时,10-15 分钟后,Matlab 屏幕左下方的符号 [“忙碌”一词旁边](当 parfor 正常工作时,通常是蓝色或绿色矩形) 变为灰色并带有黄色三角形。如果我将鼠标移过它,我会收到一条消息“并行池因错误而关闭”。 Matlab 命令窗口没有报告任何错误,并且代码继续工作,我猜只使用一名工作人员。

知道消息的可能原因吗?

【问题讨论】:

  • 我自己从未见过这个错误。你能把代码贴出来让我看看吗?
  • 很遗憾我不能,太长了。
  • 在 Editor-> 断点下,您可以选择“dbstop on error”。如果您没有收到明确的错误,不确定这是否可行,但我想值得一试。
  • 您是否尝试过使用更少的工人?我不知道这是否可行。这只是一个想法。
  • 如果有 12 个工人,您可能会耗尽内存。检查您的临时目录,有时工作人员在崩溃时会在那里写入转储文件。

标签: matlab parallel-processing parfor matlabpool


【解决方案1】:

在使用 Matlab 中的并行工具箱时,错误可能有多种原因。

我会一一尝试找出错误:

  1. 此问题可能是由内存限制引起的。由于您有 12 个核心,Matlab 将尝试分配 12 个工作人员,并且需要在内存中复制一些变量 12 次。尝试从 2 或 3 名工人开始,看看问题是否消失。在 parfor 之前调用此代码以分配 poolsize 工人:

    parpool('local', poolsize);
    

    更多详情可以查看mathWorks的这个链接。

  2. 尝试用常规的 for 运行你的代码,看看它是否仍然给你一个错误。根据我的经验,错误通常出现在最后一个循环变量中。使用 fliplr 尝试您的循环。

    % Replace:
    parfor iLoop = 1 : 100
        % "What you do in the loop"
    end
    
    % With:
    for iLoop = fliplr(1 : 100)
        % "What you do in the loop"
    end
    

    请注意,此替换仅用于调试目的,您可以在找到问题中可能存在的问题后使用 parfor。

  3. 确保预定义您的 parfor 中使用的所有变量。它减少了内存开销。

  4. 避免在 parfor 中明确使用任何 global defined variablesparfor 和运行 parfor 时调用的任何函数中都不允许使用全局变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2011-09-10
    • 2019-01-15
    • 1970-01-01
    相关资源
    最近更新 更多