Matlab中的并行池由于错误而关闭?

时间:2015-08-21 13:35:43

标签: matlab parallel-processing parfor matlabpool

我正在尝试使用Matlab-r2014b中的12个具有parfor的并行工作程序来执行代码。我被允许这样做,因为我使用的机器有12个核心。

然而,当我开始运行代码时,10-15分钟后,Matlab屏幕左下角的符号[单词“Busy”旁边](当parfor正常工作时,通常是蓝色或绿色矩形)变成灰色,带有黄色三角形。如果我将鼠标移到它上面,我会收到一条消息“并行池由于错误而关闭”。 Matlab命令窗口不报告任何错误,代码继续工作我想只使用一个工作程序。

有关消息可能原因的任何想法吗?

1 个答案:

答案 0 :(得分:0)

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

我会逐个尝试找到错误:

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

    parpool('local', poolsize);
    

    有关详细信息,您可以在mathWorks

  2. 中看到此链接
  3. 尝试使用常规 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。

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

  5. 避免在 parfor 中使用任何明确的global defined variables parfor 中以及运行 parfor 时调用的任何函数内不允许使用全局变量。