parfor / for depends on loopsize

时间:2017-02-02 20:45:03

标签: matlab for-loop parallel-processing parfor

有没有一种简单的方法可以在matlab中编写一个for循环,这样在一定数量(n)的迭代之下它是一个正常的for循环,而在这个阈值之上它是一个parfor循环?

我想减少与创建并行池相关的开销。我试图将工作者数量设置为1(少于n次迭代),但开销仍然是不可忽视的。

1 个答案:

答案 0 :(得分:2)

选项1:

加速parpool的启动(可能不适用于所有系统和/或MATLAB版本):

distcomp.feature( 'LocalUseMpiexec', false );

Source

选项2:

将一个非常长的超时设置为parpool,以便在需要时确实存在:

% This will set the idle timeout to 2 hours 
parpool('IdleTimeout', 120);
...
functionThatPossiblyCallsParfor();

% If pool is already running:
p = parpool;
p.IdleTimeout = 120;
...
functionThatPossiblyCallsParfor();

Source

选项3:

if / else根据所需的迭代次数(这回答问题标题):

if n > 1E6 % or any other appropriate limit
  parfor (...)
    someFunction(slicedInput1,slicedInput2,...);
  end
else
  for (...)
    someFunction(input1,input2,...);
  end
end