[英]Matlab: Shut down parallel pool - only working for parfeval() but not spmd
[英]Parallel pool in Matlab shut down due to error?
我正在尝试在Matlab-r2014b中使用带有parfor的12个并行工作程序执行代码。 因为我使用的机器有12个核心,所以我可以这样做。
但是,当我开始运行代码时,在10到15分钟后,Matlab屏幕左下角的符号[在单词“ Busy”旁边(当parfor正常工作时通常为蓝色或绿色矩形))变为灰色与一个黄色的三角形。 如果将鼠标移到它上面,我会收到一条消息,指出“由于错误,并行池已关闭”。 Matlab命令窗口不报告任何错误,我猜代码仅使用一个工作程序就可以正常工作。
是否知道该消息的可能原因?
在Matlab中使用并行工具箱时,可能有多个错误原因。
我会一一尝试查找错误:
此问题可能是由内存限制引起的。 由于您有12个核心,因此Matlab将尝试分配12个工作线程,并且需要将某些变量复制到内存中12次。 尝试从2个或3个工作人员开始,看问题是否消失。 PARFOR之前调用此代码分配poolsize工人:
parpool('local', poolsize);
有关更多详细信息,您可以从mathWorks中看到此链接。
尝试用定期运行你的代码 ,看看它仍然给你一个错误或没有。 以我的经验,该错误通常出现在最后一个循环变量中。 使用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时调用的任何函数内部均不允许使用全局变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.