有没有一种简单的方法可以在matlab中编写一个for循环,这样在一定数量(n)的迭代之下它是一个正常的for循环,而在这个阈值之上它是一个parfor循环?
我想减少与创建并行池相关的开销。我试图将工作者数量设置为1(少于n次迭代),但开销仍然是不可忽视的。
答案 0 :(得分:2)
加速parpool
的启动(可能不适用于所有系统和/或MATLAB版本):
distcomp.feature( 'LocalUseMpiexec', false );
(Source)
将一个非常长的超时设置为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)
if
/ else
根据所需的迭代次数(这回答问题标题):
if n > 1E6 % or any other appropriate limit
parfor (...)
someFunction(slicedInput1,slicedInput2,...);
end
else
for (...)
someFunction(input1,input2,...);
end
end