3

我有一个 i7-M620 处理器,每个内核有 2 个物理内核和 2 个线程(多线程 CPU)(总共 4 个线程)。当我使用 MATLAB Parallel Computing Toolbox 时,我只能打开 2 个池而不是 4 个。这是代码:

matlabpool(2)
parfor i = 1:20
    Test(i) = i^2;
end
matlabpool close
  • 有人可以解释为什么吗?
  • 我在这里做多线程还是多核计算?
  • 是否可以同时使用 MATLAB?
4

3 回答 3

5

我通过编辑并行计算的“本地”配置解决了这个问题(我的核心 i5 有 2 个核心和 4 个线程):

  1. Parallel->Manage Cluster Profiles
  2. 根据您的 Matlab 版本,您需要Validatelocal更改任何内容之前查看配置文件。
  3. 单击edit并更改NumWorkers变量以满足您的需要。

然后你可以matlabpool这样开始:

matlabpool local

请注意,我从未使用parfor. Matlab 的开销总是大于收益。我要说的是:首先对您的代码进行基准测试,然后确定parfor(或其他并行的东西)是否适合您。

于 2012-05-05T09:42:58.387 回答
4

对于并行配置,这是在请求比默认值更多的工作人员时引发的错误:

本地集群的默认值NumWorkers是本地机器上的核心数。要在比这更多的工作人员上运行通信作业,请增加集群的 NumWorkers 属性的值。

您可以通过修改'local'配置文件集群属性来解决这个问题,从而有效地控制默认数量。来自PCT R2013a 文档

myCluster = parcluster('local'); 
myCluster.NumWorkers = 4; % 'Modified' property now TRUE 
saveProfile(myCluster);   % 'local' profile now updated,
                          % 'Modified' property now FALSE

然后matlabpool open会给你(默认)数字。工人,而matlabpool(n)会给你n工人,直到上面设置的最大值/默认值(n<=4)。您可以通过以下方式检查当前开放工作人员的数量:

matlabpool('size')

或从桌面右下角的指示器在此处输入图像描述图标,例如。

于 2013-07-23T16:15:18.257 回答
1

我的桌面站有一个 i7-2600 CPU,操作系统是最新的Linux Mint。我测试了MATLAB 2012b的并行计算,默认NumWorker为4(i7-2600的核心数),我修改本地集群配置文件为NumWorker值的8,然后和workers设置对比是 4 和 8(就像@rubenvb 发布的那样)。

结果表明,在串行模式下,耗时约为429秒,而在并行模式下(matlabpool open 4) ,8个worker耗时分别为254秒和218秒,分别提升了40.79%49.18%, 分别。

我进一步仔细研究了我的代码,发现并行体内部也实现了MATLAB矢量化优化,即这种提升需要额外的CPU资源,因此对于8情况下的NumWorkers(即启用超线程),它没有足够的空闲CPU资源来促进向量化,在某种程度上是CPU资源竞争,降低了并行效率。这也是当 NumWorkers 为 4 时几乎具有同等提升效率的原因。

结论是 MATLAB 中的并行计算很有帮助,实现起来很简单,但应该谨慎使用,这都是我个人的看法。

于 2012-12-07T12:00:50.680 回答