可以通过编程方式打开/关闭Matlab PARFOR循环吗?

Kyl*_*nch 9 matlab parfor

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

所以,我正在寻找具有此功能的简单内容:

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

  % Do loop tasks.

  end
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*nas 6

不,这是不可能的.但是,如果你可以将循环体包装在一个单独的函数中,你可以使用一个parfor或一个for循环来调用正文,即

if (flag)
   parfor i=1:n
      out(i) = loopBody(i)
   end
else
   for i=1:n
      out(i) = loopBody(i)
   end
end
Run Code Online (Sandbox Code Playgroud)

或者,让你要么你可以编辑代码,parforfor在你的循环,这是我最后往往做的前面.

  • 如果是4月1日,我会评论"我希望MATLAB有`#define`s!然后我们可以`#define LOOP parfor`或`#define LOOP for`我们不会有这个问题!" (2认同)
  • @ Li-aungYip:是的,这确实很方便.`parfor`很难调试.我希望在R2015a附近,问题是固定的. (2认同)

Edr*_*ric 6

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

if flag
  arg = Inf;
else
  arg = 0;
end
parfor (idx = 1:n, arg)
   ...
end
Run Code Online (Sandbox Code Playgroud)


Moh*_*nia 5

关闭池时matlabpool close,parfor行为就像一个for并允许所有图形处理.所以你只需要在调试时关闭池.