【问题标题】:Level of Parallelism present in multiple threads per core每个内核的多个线程中存在的并行级别
【发布时间】:2014-04-02 21:08:39
【问题描述】:

所以我一直在研究一些实现每个内核多线程的技术(如英特尔的超线程),我想知道这些技术的并行程度如何。是真正的并行还是更有效的并发?看起来它们仍然共享相同的执行单元和核心资源,基本上看起来只是虚拟化了使用。所以我不确定真正的并行性是如何发生的。如果是这种情况,那么有什么好处呢?您可以通过有效的线程上下文切换来实现并发。

【问题讨论】:

    标签: multithreading performance architecture parallel-processing hyperthreading


    【解决方案1】:

    我不是专家,但根据我所读到的内容 (Long Duration Spin-wait Loops on Hyper-Threading Technology Enabled Intel Processors):

    每个物理处理器都有两个逻辑处理器。每个逻辑处理器都有自己独立的架构状态,但几乎共享物理处理器上的所有其他资源,例如缓存、执行单元、分支预测器、控制逻辑和总线。

    因此,基本上,如果一个逻辑处理器正在使用一个物理单元(例如,FPU,浮点单元),则允许另一个逻辑处理器使用另一个资源(例如,ALU,算术逻辑单元)。

    根据我的阅读,您可以预期在最佳情况下性能会提高 15-20%。我没有任何实际数字,但不要期望添加另一个物理处理器会带来相同水平的性能提升。

    【讨论】:

    • 感谢您的回复。我真的不明白为什么这会有用,动态调度和乱序执行我想现在的大部分资源都会被利用。此外,我预计监控资源利用率所产生的开销会使收益边缘化。
    • @PandaRaid 我承认我对细节知之甚少,但现代处理器似乎确实有大量的资源过剩,以至于让 2 个线程运行在同一个CPU同时进行。这是另一个很好的解释:tomshardware.co.uk/answers/id-1694436/hyperthreading-work.html#.
    • @PandaRaid "我想现有的大部分资源都会被利用" - 如果有多个给定类型的资源(例如,多个 ALU)
    • 即使有多个功能单元,它们仍然被使用。大多数现代处理器使用乱序执行、动态调度和需要流水线或复制硬件的多个问题。
    • 不要忘记,现在计算机的 RAM 系统比它的 CPU 慢很多。 L1、L2、L3 缓存有帮助,但有时线程需要访问任何缓存中都不存在的一块内存,并且线程除了等待直到从 RAM 中获取所需的数据之外没有什么可做的,这可能需要几千个周期。使用超线程(以及另一个准备运行的线程),CPU 可以简单地将该线程放在一边,让另一个线程运行,直到数据到达 CPU ——如果没有超线程,CPU 在此期间将处于空闲状态。
    【解决方案2】:

    因此,有很多因素决定了超线程的优势。首先,由于它们共享资源,显然没有真正的并行性,但它们的并发性有所增加,具体取决于处理器的类型。

    共有三种类型的硬件线程。细粒度以循环方式切换线程,以增加吞吐量为目标,但代价是增加单个线程延迟。切换是在时钟到时钟的基础上完成的。当然,它更像是上下文切换,其中处理器在发生停顿或某种内存获取时切换线程。然后是线程切换在同一时钟同时发生,这意味着在 Reorder Buffer 和 Pipeline 中同时存在多个线程数据。它们的描述如下。

    超线程对应于该图中的 SMT。正如所见,设计的有效性主要取决于一件事:管道的繁忙程度。在动态调度的处理器中,目标是保持管道和执行单元尽可能繁忙,其优点是收益递减,与我所看到的相比大约 0% 到 5%。对于流水线有很多停顿的静态调度处理器,其好处更为普遍,并且根据编译器对指令重新排序的能力,可以看到大约 20% 到 40% 的增益。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2014-10-18
      • 2016-04-25
      • 1970-01-01
      • 2015-04-08
      相关资源
      最近更新 更多