2

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

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

知道消息的可能原因吗?

4

1 回答 1

0

在使用 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中使用任何显式全局定义的变量parfor和运行parfor时调用的任何函数中都不允许使用全局变量。

于 2016-03-10T07:58:26.923 回答