parfor/for 取决于循环大小

parfor/for depending on loopsize

有没有一种简单的方法可以在matlab中编写一个for循环,使得低于一定的迭代次数(n)它是一个普通的for循环,而高于这个阈值它是一个parfor循环?

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

选项 1:

加速 parpool 的启动(可能不适用于所有系统 and/or 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