我在Ubuntu
上有一台正在运行Intel(R) Core(TM) i5-2410M CPU @ 2.30GHz
的笔记本电脑。根据上述处理器的Intel
网站(位于here),该处理器有两个内核,可以并行运行4个线程(因为它有2个物理内核,它有4个逻辑内核)
当我启动matlabpool
时,它以local
配置开头,并表示已连接到2个实验室。我想这意味着它可以并行运行2个线程。难道不知道CPU实际上可以并行运行4个线程吗?
答案 0 :(得分:9)
根据我的经验,local
matlabpool
配置默认使用机器拥有的物理核心数,而不是逻辑核心数。因此,在您的计算机上,matlabpool
仅连接到两个实验室。
但是,这只是一个设置,可以使用以下命令覆盖:
matlabpool poolsize n
其中n
是1到12之间的整数,表示您希望Matlab使用的实验数量。
现在我们得到了一些有趣的信息,因为@RodyOldenhuis在评论中提供了一个快速的课程,我有更好的回答。
超线程意味着给定的物理内核可以同时运行两个线程。当然,它们不能同时处理。这个想法更像是这样:如果其中一个线程在将任务分配给核心方面效率很低,那么核心可能会出现一些“停机时间”。第二个线程可以利用这个“停机时间”来完成一些工作。
根据我的经验,Matlab通常可以有效地将线程分配给核心,因此在一个Matlab线程(即一个实验室)中运行它,核心可能只有很少的“停机时间”,因此会非常超线程的优点很少。我的桌面是一个core-i7,有4个物理内核,但有8个逻辑内核。但是,我注意到运行parfor
循环与4个实验室和8个实验室之间的差别很小。实际上,由于与初始化额外实验室相关的启动成本,8个实验室通常较慢。
当然,这可能会因其他外部因素而变得复杂,例如您可能同时运行到Matlab的其他程序。
总之,我怀疑即使您可以强制Matlab初始化4个实验室(甚至12个实验室),您也不会看到超过2个实验室的加速,因为Matlab通常在分配时非常有效任务到处理器。