Matlabpool线程数与核心数

abh*_*rni 7 matlab multithreading multicore

我有一台笔记本电脑上运行UbuntuIntel(R) Core(TM) i5-2410M CPU @ 2.30GHz.根据Intel上述处理器(位于此处)的网站,该处理器有两个内核,可以并行运行4个线程(因为它有2个物理内核,它有4个逻辑内核).

当我开始时,matlabpool它从local配置开始,并说它已连接到2个实验室.我想这意味着它可以并行运行2个线程.难道不知道CPU实际上可以并行运行4个线程吗?

Col*_*ers 9

根据我的经验,默认情况下,local配置matlabpool使用机器拥有的物理核心数,而不是逻辑核心数.因此,在您的机器上,matlabpool只连接到两个实验室.

但是,这只是一个设置,可以使用以下命令覆盖:

matlabpool poolsize n
Run Code Online (Sandbox Code Playgroud)

其中n是1到12之间的整数,表示您希望Matlab使用的实验数量.

现在我们得到了有趣的一点,由于@RodyOldenhuis在评论中的快速课程,我有更好的回答.

超线程意味着给定的物理内核可以同时运行两个线程.当然,它们不能同时处理.这个想法更像是这样:如果其中一个线程在将任务分配给核心方面效率很低,那么核心可能会出现一些"停机时间".第二个线程可以利用这个"停机时间"来完成一些工作.

根据我的经验,Matlab通常可以有效地将线程分配给核心,因此在一个Matlab线程(即一个实验室)中运行它,核心可能只有非常少的"停机时间",因此几乎没有什么优势.超线程.我的桌面是一个core-i7,有4个物理内核,但有8个逻辑内核.但是,我发现在运行parfor4个实验室的循环与8个实验室之间的差异非常小.实际上,由于与初始化额外实验室相关的启动成本,8个实验室通常较慢.

当然,这可能会因其他外部因素而变得复杂,例如您可能同时运行到Matlab的其他程序.

总之,我怀疑即使您可以强制Matlab初始化4个实验室(甚至12个实验室),您也不会看到超过2个实验室的加速,因为Matlab通常在分配任务时非常有效.处理器.

  • 您仍然受到物理核心数量的限制.[超线程](http://en.wikipedia.org/wiki/Hyper-threading)更像是一个更有效的多线程程序调度程序.性能变化很大程度上取决于正在运行的进程类型.对于许多算法,将有显着的改进(最多约35%左右),对于许多其他算法,将不会有任何明显的改变.在任何情况下,有4个物理核心*总是*节拍有2个物理核心和2个"伪造"核心. (7认同)