我正在尝试在 Matlab-r2014b 中使用 12 个并行工作程序和 parfor 执行代码。我可以这样做,因为我使用的机器有 12 个内核。
但是,当我开始运行代码时,10-15 分钟后,Matlab 屏幕左下角的符号 [“忙碌”一词旁边](parfor 正常工作时通常是蓝色或绿色矩形)变为灰色带有黄色三角形。如果我将鼠标移过它,我会收到一条消息“并行池因错误而关闭”。Matlab 命令窗口没有报告任何错误,并且代码继续工作我猜只使用一个工作人员。
知道消息的可能原因吗?
我正在尝试在 Matlab-r2014b 中使用 12 个并行工作程序和 parfor 执行代码。我可以这样做,因为我使用的机器有 12 个内核。
但是,当我开始运行代码时,10-15 分钟后,Matlab 屏幕左下角的符号 [“忙碌”一词旁边](parfor 正常工作时通常是蓝色或绿色矩形)变为灰色带有黄色三角形。如果我将鼠标移过它,我会收到一条消息“并行池因错误而关闭”。Matlab 命令窗口没有报告任何错误,并且代码继续工作我猜只使用一个工作人员。
知道消息的可能原因吗?
在使用 Matlab 中的并行工具箱时,错误可能有多种原因。
我会一一尝试以找到错误:
此问题可能是由内存限制引起的。由于您有 12 个核心,Matlab 将尝试分配 12 个工作人员,并且它需要在内存中复制一些变量 12 次。尝试从 2 或 3 名工人开始,看看问题是否消失。在parfor之前调用此代码以分配poolsize工作人员:
parpool('local', poolsize);
有关更多详细信息,您可以从mathWorks中查看此链接。
尝试使用常规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。
确保预先定义parfor中使用的所有变量。它减少了内存开销。
避免在parfor中使用任何显式全局定义的变量。parfor和运行parfor时调用的任何函数中都不允许使用全局变量。