7

我有适用于 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

我得到以下错误:

错误:

您要求至少 4 个工作人员,但集群“本地”的 NumWorkers 属性设置为最多允许 2 个工作人员。要在比这更多的工作人员(本地集群最多 12 个)上运行通信作业,请增加集群的 NumWorkers 属性的值。本地集群的 NumWorkers 的默认值是本地机器上的核心数。

为什么?我机器中 NumWorkers 的默认值为 2,但如果我可以同时进行 4 个循环,我该如何获得呢?

4

2 回答 2

9

要增加默认值NumWorkers,请打开集群配置文件管理器(Parallel->Manage Cluster Profiles)。选择local配置文件,单击编辑,然后增加到NumWorkers最大可能值(在您的情况下为 4)。现在可以matlabpool在您的机器上创建一个具有比物理内核更多的工作人员。

但是,请注意,与使用相同数量的工作人员作为核心相比,使用比核心更多的工作人员可能会导致性能下降。

于 2013-02-20T16:21:05.197 回答
9

要以编程方式将集群配置文件的值NumWorkers从 2 更改为 4 ,您可以使用local

myCluster = parcluster('local');
myCluster.NumWorkers = 4;  % 'Modified' property now TRUE
saveProfile(myCluster);    % 'local' profile now updated,
                           % 'Modified' property now FALSE    
于 2014-06-12T23:21:13.163 回答