在MATLAB中有一个关于parfor的简单问题。我想在我的程序中设置一个标志,以便在parfor和regular for循环之间进行更改。基本上,我需要这个功能,以便我的代码的某些部分可以在“调试”模式下更新图形,然后当标志关闭时,使用parfor没有图形更新的速度。
所以,我正在寻找具有此功能的简单方法:
if (flag)
for i = 1:n
else
parfor i = 1:n
end
% Do loop tasks.
end
任何帮助将不胜感激!谢谢!
答案 0 :(得分: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
或者,您可以编辑代码,以便在循环前面有parfor
或for
,这是我经常要做的事情。
答案 1 :(得分:6)
还有一个选项 - 使用PARFOR
的可选参数if flag
arg = Inf;
else
arg = 0;
end
parfor (idx = 1:n, arg)
...
end
答案 2 :(得分:5)
当您按matlabpool close
关闭池时,parfor
的行为与for
相似,并允许所有图形处理。所以你只需要在调试时关闭池。