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
有没有一种简单的方法可以在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