所以我一直在研究一些实现每个内核多线程的技术(比如英特尔的超线程),我想知道这些技术的并行程度如何。是真正的并行还是更有效的并发?看起来他们仍然共享相同的执行单元和核心资源,基本上看起来只是虚拟化使用。所以我不确定真正的并行性是如何发生的。如果是这种情况,那么有什么好处呢?您可以通过有效的线程上下文切换来实现并发。
2 回答
我不是专家,但从我所读到的(启用超线程技术的英特尔处理器上的长时间自旋等待循环):
每个物理处理器都有两个逻辑处理器。每个逻辑处理器都有自己独立的架构状态,但几乎共享物理处理器上的所有其他资源,例如高速缓存、执行单元、分支预测器、控制逻辑和总线。
因此,基本上,如果一个逻辑处理器正在使用一个物理单元(例如,FPU,浮点单元),则允许另一个逻辑处理器使用另一个资源(例如,ALU,算术逻辑单元)。
根据我所读到的,您可以预期在最佳情况下性能会提高 15-20%。我没有任何实际数字,但不要期望与添加另一个物理处理器所期望的相同水平的性能提升。
所以有很多因素决定了超线程的好处。首先,由于它们共享资源,显然没有真正的并行性,但它们的并发性有所增加,具体取决于处理器的类型。
硬件线程分为三种类型。细粒度以循环方式切换线程,以增加吞吐量为目标,但代价是增加单个线程延迟。切换是在时钟到时钟的基础上完成的。当然,它更像是上下文切换,其中处理器在发生停顿或某种内存获取时切换线程。然后是线程切换在同一时钟同时发生,这意味着在 Reorder Buffer 和 Pipeline 中同时存在多个线程数据。它们描述如下。
超线程对应于该图中的 SMT。正如所见,设计的有效性主要取决于一件事:管道的繁忙程度。在动态调度的处理器中,目标是保持管道和执行单元尽可能繁忙,其优点是收益递减,与我所看到的相比大约 0% 到 5%。对于流水线有很多停顿的静态调度处理器,其好处更为普遍,并且根据编译器对指令重新排序的能力,可以看到大约 20% 到 40% 的增益。