如何并行4与PARFOR一起使用Matlab中的Core i3

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个循环,我该如何获取它?

Fra*_*urt 9

要以编程方式更改群集配置文件的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)


H.M*_*ter 8

要增加默认值NumWorkers,请打开Cluster Profile Manager(并行 - >管理群集配置文件).选择local配置文件,单击编辑,然后增加到NumWorkers最大可能值(在您的情况下为4).现在可以matlabpool在您的计算机上创建一个包含更多工作者而不是物理内核的工作者.

但是,请注意,与具有相同数量的工作核心相比,使用更多工作者而不是核心可能会导致性能下降.

  • 默认值是物理核心数(甚至在您在问题中引用的错误消息中说明了这一点).工作人员多于核心*会降低您的性能,因为它们不会在物理上独立的核心上运行,即它们可能会相互影响. (2认同)