10

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

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

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

  % Do loop tasks.

  end

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

4

3 回答 3

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

或者,您可以编辑代码,以便在循环之前parforfor在循环之前,这是我经常做的事情。

于 2012-04-13T01:28:39.607 回答
6

另一种选择 - 使用PARFOR的可选参数

if flag
  arg = Inf;
else
  arg = 0;
end
parfor (idx = 1:n, arg)
   ...
end
于 2014-05-07T15:58:47.623 回答
5

当您关闭池时matlabpool closeparfor行为就像 afor并允许所有图形处理。所以你只需要在调试时关闭池。

于 2013-06-26T23:07:27.297 回答