我有一台笔记本电脑,运行着 Ubuntu
操作系统,并搭载了 Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz
处理器。 根据 Intel
网站上对于该处理器的介绍(在这里),该处理器有两个物理核心和四个逻辑核心,可以同时运行4个线程。
当我启动 matlabpool
时,它以 local
配置启动,并显示已连接到2个实例。我猜这意味着它可以同时运行2个线程。那么它是否不知道该CPU实际上可以并行运行4个线程?
我有一台笔记本电脑,运行着 Ubuntu
操作系统,并搭载了 Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz
处理器。 根据 Intel
网站上对于该处理器的介绍(在这里),该处理器有两个物理核心和四个逻辑核心,可以同时运行4个线程。
当我启动 matlabpool
时,它以 local
配置启动,并显示已连接到2个实例。我猜这意味着它可以同时运行2个线程。那么它是否不知道该CPU实际上可以并行运行4个线程?
matlabpool
的 local
配置默认使用机器拥有的物理核心数而非逻辑核心数。因此,在你的计算机上,matlabpool
只连接两个实验室。matlabpool poolsize n
其中n
是介于1到12之间的整数,表示您想要Matlab使用的实验室数量。
现在我们进入了我比较擅长回答的有趣部分,这要归功于@RodyOldenhuis在评论中给我的快速课程。
超线程意味着一个物理核心可以同时运行两个线程。当然,它们不能真正同时被处理。这个想法更像是这样的:如果其中一个线程在将任务分配给核心方面效率低下,那么核心可能会表现出一些"停机时间"。第二个线程可以利用这个"停机时间"来完成一些工作。
根据我的经验,Matlab通常有效地分配线程到核心,因此通过一个Matlab线程(即一个实验室)运行,核心可能几乎没有"停机时间",因此超线程几乎没有什么优势。我的桌面电脑是一台带有4个物理核心但8个逻辑核心的core-i7。但是,我注意到在使用4个实验室与8个实验室运行parfor
循环时几乎没有什么区别。实际上,由于初始化额外实验室的启动成本,8个实验室通常更慢。
当然,这可能会受到其他外部因素的干扰,例如您可能同时运行的其他程序。
总之,我的猜测是,即使您强制Matlab初始化4个实验室(甚至12个实验室),与2个实验室相比,您不会看到太大的加速,因为Matlab通常相当有效地将任务分配给处理器。