MATLAB: 多线程与多核之间的区别

8 浏览
0 Comments

MATLAB: 多线程与多核之间的区别

我有一台i7-M620处理器,它有2个物理核心和每个核心2个线程(多线程CPU)(总共4个线程)。当我使用MATLAB并行计算工具箱时,我只能打开2个池而不是4个。以下是代码:

matlabpool(2)
parfor i = 1:20
    Test(i) = i^2;
end
matlabpool close

  • 有人能解释一下为什么吗?
  • 我在这里进行的是多线程还是多核计算?
  • 在MATLAB中是否可能同时进行两者?
0
0 Comments

在这段内容中,作者提到了在MATLAB中使用多线程和多核的区别,并解释了为什么有些用户无法获得预期的性能提升。还有一种解决方法,以及一些建议来优化代码的并行性能。

在这段内容中,作者首先提到了他的电脑配置是i5处理器,有2个核心和4个线程。然后,作者分享了如何通过编辑"local"配置文件来解决并行计算过程中的问题。具体步骤如下:

1. 进入"Parallel->Manage Cluster Profiles"。

2. 需要验证"local"配置文件(根据MATLAB版本不同,可能需要进行验证)。

3. 点击"edit"并修改"NumWorkers"变量以适应自己的需求。

然后,作者提到可以使用以下命令来启动"matlabpool":

matlabpool local

作者还指出,他从未在使用"parfor"时获得过性能提升,因为MATLAB的开销总是超过了性能提升的好处。作者建议在使用并行计算之前先对代码进行基准测试,然后再决定是否使用"parfor"或其他并行计算方法。

接下来,作者提到在双核处理器上并没有看到很大的性能提升,但可能需要将更多的任务放在循环内部。而在8核工作站上,每次迭代需要约1分钟的处理任务可以实现线性加速。作者还提到,较新的i7处理器的开销要低得多。

作者提到,如果任务是I/O绑定的,超线程技术可以显著提高性能。也可以使用"matlabpool 4"快速打开一个带有4个工作线程的线程池。

最后,其他用户对这个问题进行了讨论。其中一位用户提到,在他的旧Core2笔记本电脑上,该命令曾经起作用,但在他的机器上,如果想要超过默认的2个线程,就需要修改配置文件来允许使用4个线程。另一位用户提到,他在大多数CPU密集型算法中确实获得了性能提升,但性能提升从未达到2倍。还有一些用户提到了关于超线程和线程池数量的问题,并得到了其他用户的解答。

,这段内容讨论了MATLAB中多线程和多核的区别,提供了解决方法和优化建议,以及其他用户的讨论和反馈。

0
0 Comments

我的台式电脑配备有一颗i7-2600处理器,操作系统是最新的Linux Mint。我测试了MATLAB 2012b的并行计算功能,默认情况下NumWorker是4(即i7-2600的核心数),我修改了本地集群配置文件,将NumWorker的值设为8,然后进行了4个和8个工作线程的比较(正如我之前发布的帖子)。

结果显示,在串行模式下,耗时约为429秒,而在并行模式下(打开4个matlabpool),耗时约为254秒和218秒,即提升了40.79%和49.18%。

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

结论是,在MATLAB中进行并行计算非常有帮助且简单易实现,但需要谨慎使用,这是我个人的观点。

0
0 Comments

在使用MATLAB进行并行配置时,当请求的工作进程数超过默认值时,会出现以下错误信息:

默认情况下,本地集群的NumWorkers属性值等于本地计算机上的核心数。要在更多的工作进程上运行通信作业,需要增加集群的NumWorkers属性值。

可以通过修改'local'配置文件集群属性来解决此问题。从PCT R2013a文档中可以了解到,以下代码可以实现该目的:

myCluster = parcluster('local');
myCluster.NumWorkers = 4; % 'Modified'属性现在为TRUE
saveProfile(myCluster);   % 'local'配置文件现在已更新,
                          % 'Modified'属性现在为FALSE

然后,matlabpool open命令将给出默认的工作进程数,而matlabpool(n)命令将给出n个工作进程,最多不超过上述设置的最大值/默认值(n<=4)。可以使用以下命令来检查当前打开的工作进程数:

matlabpool('size')

或者从桌面右下角的指示器图标中查看,例如:enter image description here

0