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