Man*_*ero 7 parallel-processing matlab intel parfor
我有用于Ubuntu 64位的Matlab R2012b.我有一个Intel Core i3 CPU M 330 @ 2.13GHz×4.
我想使用parfor同时并行化4个循环.因为英特尔酷睿i3有2个核心和4个线程我使用此代码:
if matlabpool('size') == 0 % checking to see if my pool is already open
matlabpool(4)
else
matlabpool close
matlabpool(4)
end
Run Code Online (Sandbox Code Playgroud)
我得到以下错误:
错误:
您请求的工作人员至少为4人,但群集"local"的NumWorkers属性设置为最多允许2名工作人员.要在比此更多的工作程序上运行通信作业(本地群集最多为12),请增加群集的NumWorkers属性的值.本地群集的NumWorkers的默认值是本地计算机上的核心数.
为什么?我机器中NumWorkers的默认值是2,但如果我可以同时执行4个循环,我该如何获取它?
要以编程方式更改群集配置文件的NumWorkers2到4 的值local,您可以使用:
myCluster = parcluster('local');
myCluster.NumWorkers = 4; % 'Modified' property now TRUE
saveProfile(myCluster); % 'local' profile now updated,
% 'Modified' property now FALSE
Run Code Online (Sandbox Code Playgroud)
要增加默认值NumWorkers,请打开Cluster Profile Manager(并行 - >管理群集配置文件).选择local配置文件,单击编辑,然后增加到NumWorkers最大可能值(在您的情况下为4).现在可以matlabpool在您的计算机上创建一个包含更多工作者而不是物理内核的工作者.
但是,请注意,与具有相同数量的工作核心相比,使用更多工作者而不是核心可能会导致性能下降.