【问题标题】:Matlabpool number of threads vs coreMatlabpool 线程数与核心数
【发布时间】:2013-01-06 07:02:06
【问题描述】:

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

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

【问题讨论】:

  • 如果我的回答回答了问题,请点击旁边的勾号。否则,如果您在评论中让我知道您发现缺少什么,那么我可以尝试改进它。干杯。
  • @ColinTBowers:完成!感谢您的回答,并根据您从 cmets 中学到的内容对其进行更新。

标签: multithreading matlab multicore


【解决方案1】:

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

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

matlabpool poolsize n

其中n 是一个介于 1 和 12 之间的整数,表示您希望 Matlab 使用的实验室数。

现在我们开始讨论有趣的一点,感谢@RodyOldenhuis 在 cmets 的快速课程,我可以更好地回答。

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

根据我的经验,Matlab 在将线程分配给内核方面通常很高效,因此,如果有一个 Matlab 线程(即一个实验室)通过它,内核可能只有很少的“停机时间”,因此会有非常超线程的优势不大。我的台式机是 core-i7,有 4 个物理核心,但有 8 个逻辑核心。但是,我注意到运行具有 4 个实验室和 8 个实验室的 parfor 循环之间几乎没有区别。事实上,由于与初始化额外的实验室相关的启动成本,8 个实验室的速度通常较慢。

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

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

【讨论】:

  • 您仍然受到物理内核数量的限制。 Hyperthreading 更像是一个更高效的多线程程序调度程序。性能变化很大程度上取决于正在运行的进程类型。对于许多算法而言,会有显着的改进(最大约为 35% 左右),对于许多其他算法而言,不会有任何明显的变化。在任何情况下,拥有 4 个物理核心总是胜过拥有 2 个物理核心和 2 个“假”核心。
  • @RodyOldenhuis 换句话说,如果一种算法在将线程分配给物理内核的方式上特别有效,那么超线程几乎没有什么好处。但是,如果算法分配线程时内核遇到“停机时间”,那么分配给同一内核的第二个线程可以利用该“停机时间”来完成一些工作。这是一个合理的解释吗? ps 感谢您的评论 - 如果我的解释是好的,我会更新答案。
  • 据我了解,是的,这是一个很好的解释。当然还有更多,但是对于这个问题的上下文,这很好。超线程的优点多于缺点,因此最好保留它。但它确实是“穷人的多核”,所以不要指望 HT 将任何算法的运行时间减半 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 2013-01-17
  • 2013-03-02
  • 2011-02-07
  • 2013-01-11
相关资源
最近更新 更多