Matlab PARFOR循环能否以编程方式打开/关闭?

Matlab PARFOR循环能否以编程方式打开/关闭?,matlab,parfor,Matlab,Parfor,在MATLAB中有一个关于parfor的简单问题。我想在我的程序中设置一个标志,在parfor和regular for循环之间切换。基本上,我需要这个功能,以便我的代码的某些部分可以在“调试”模式下更新图形,然后当标志关闭时,使用parfor,而不使用图形更新来提高速度 因此,我正在寻找具有以下功能的简单产品: if (flag) for i = 1:n else parfor i = 1:n end % Do loop tasks. end 任何帮助都将不胜感激!谢谢 不

在MATLAB中有一个关于parfor的简单问题。我想在我的程序中设置一个标志,在parfor和regular for循环之间切换。基本上,我需要这个功能,以便我的代码的某些部分可以在“调试”模式下更新图形,然后当标志关闭时,使用parfor,而不使用图形更新来提高速度

因此,我正在寻找具有以下功能的简单产品:

if (flag)
  for i = 1:n
else
  parfor i = 1:n
end

  % Do loop tasks.

  end

任何帮助都将不胜感激!谢谢

不,这是不可能的。但是,如果可以在单独的函数中包装循环体,则可以使用
parfor
for
循环调用循环体,即

if (flag)
   parfor i=1:n
      out(i) = loopBody(i)
   end
else
   for i=1:n
      out(i) = loopBody(i)
   end
end

或者,您可以编辑代码,以便在循环前面有
parfor
for
,这是我经常做的事情

通过
matlabpool close
关闭池时,
parfor
的行为就像
for
一样,并允许所有图形处理。因此,您只需在调试时关闭池。

还有一个选项-使用可选参数


将池大小保留为1可以解决您的问题吗?不完全是因为parfor限制创建任何图形对象,例如绘图。因此,每当我需要这个输出时,我都必须手动编辑函数的代码。如果是4月1日,我会这样评论:“我希望MATLAB有
#define
s!那么我们可以
#define LOOP parfor
#define LOOP for
,我们就不会有这个问题了!”李昂杰:是的,这确实很方便
parfor
用于调试。不过,我预计在R2015a左右,问题已经解决。
parfor
的行为与
for
的行为不一样,即使没有员工池。循环迭代的顺序不能保证,它们可以以任何顺序执行。通常,为了确保不依赖于正常的顺序,它们实际上是以相反的顺序执行的。请注意,这不再是真的-最新版本的MATLAB&PCT可以自动为您打开一个池,因此您可能需要根据我的回答,使用可选的工作者数量参数来
parfor
if flag
  arg = Inf;
else
  arg = 0;
end
parfor (idx = 1:n, arg)
   ...
end