【问题标题】:Does a hyperthreading CPU implement parallelism or just concurrency?超线程 CPU 是实现并行还是仅实现并发?
【发布时间】:2015-10-27 01:25:01
【问题描述】:

超线程 CPU 是实现并行还是仅实现并发(上下文切换)?

我的猜测是没有并行性,只有上下文切换的并发。

【问题讨论】:

  • 有什么区别?
  • @EngineerDollery 确实有很大区别
  • 是的,但它是什么?或者,我应该说:实际上它们是完全一样的,但知道为什么你认为它们不同会很有趣?
  • @EngineerDollery 请在下面阅读我的回答。你可能会找到你正在寻找的东西。 :)
  • @EngineerDollery 另外,如果您认为 parallelismconcurrency 含义相同,请查看链接 - stackoverflow.com/questions/1050222/…wiki.haskell.org/Parallelism_vs._Concurrency

标签: cpu computer-architecture hyperthreading


【解决方案1】:

具有超线程的单个物理 CPU 核心在操作系统中显示为 两个逻辑 CPU。 CPU 仍然是单 CPU,所以有点“作弊”——虽然操作系统认为每个内核有两个 CPU,但实际的 CPU 硬件只有 一组执行资源 用于每个核心。 CPU 假装它拥有比实际更多的内核,并且它使用自己的逻辑来加速程序执行。超线程允许两个逻辑 CPU 内核共享物理执行资源。这可以在一定程度上加快速度——例如,如果一个虚拟 CPU 停止并等待,另一个虚拟 CPU 可以借用其执行资源。此外,免费资源可用于同时执行其他任务。 超线程可以帮助加速您的系统,但远不如拥有额外的内核。真正意义上的并行性(如在 GPGPU 架构或多个物理内核中的独立执行)在单核处理器上无法实现,除非您正在考虑超标量架构。

发件人: https://en.wikipedia.org/wiki/Superscalar_processor

超标量处理器与多核处理器的不同之处在于,多个执行单元并不是整个处理器。单个处理器由更细粒度的执行单元组成,例如 ALU、整数乘法器、整数移位器、FPU 等。每个执行单元可能有多个版本,以支持并行执行许多指令。这不同于同时处理来自多个线程的指令的多核处理器,每个处理单元(称为“核心”)一个线程。它也不同于流水线处理器,在流水线处理器中,多条指令可以同时处于不同的执行阶段,采用流水线方式。

发件人: http://www.cslab.ece.ntua.gr/courses/advcomparch/2007/material/readings/HYPERTHREADING%20TECHNOLOGY%20IN%20THE%20NETBURST%20MICROARCHITECTURE.pdf

超线程技术使单个物理处理器看起来像是多个逻辑处理器。 每个逻辑处理器都有一个架构状态副本,这些处理器共享一组物理执行资源。从软件或架构的角度来看,这意味着操作系统和用户程序可以调度进程或线程到逻辑处理器,就像它们在多处理器系统中的传统物理处理器上一样。 从微架构的角度来看,这意味着来自逻辑处理器的指令将在共享的执行资源上持续并同时执行。这可以大大提高处理器资源的利用率。 Netburst 微架构上的超线程技术实现在每个物理处理器上有两个逻辑处理器。图 1 显示了具有超线程技术能力的处理器的概念视图。每个逻辑处理器都维护着一套完整的体系结构状态。体系结构状态由寄存器组成,包括通用寄存器、用于控制的寄存器、高级可编程中断控制器 (APIC),以及一些用于机器状态的寄存器。 从软件的角度来看,架构状态的复制使每个物理处理器看起来像是两个处理器。 每个逻辑处理器都有自己的中断控制器,即 APIC,它只处理发送到其特定逻辑处理器的中断.

注意:对于使用超标量内核(即每个周期可以发出多个操作)的同时多线程处理,执行过程有很大不同。

【讨论】:

  • 同时多线程不需要一个线程停止以使另一个线程处于活动状态(即使是细粒度的多线程也没有这个要求)。 SMT 需要一个超标量内核(即每个周期可以发出多个操作的内核),因为线程可以同时执行操作。 FGMT 允许管道内的并发(即,多个线程可以同时使用管道的不同阶段处于活动状态)。 (顺便提一下,超线程也指的是 Itanium 的 switch-on-event-multithreading;对于 x86,它只用于 SMT。)
  • @PaulA.Clayton 是的,你是对的,但我试图带回家的一点是,在单核处理器上,资源总是共享的,并且在其上执行的不同线程依赖于在更大程度上彼此。
  • @CrakC 说核心只有“一组执行资源”是一种误导。实际上复制了许多硬件单元以启用 SMT,只是没有多核所需的那么多。
  • @CrakC Hyperthreading Technology in the Netburst Microarchitecture。检查图 1 和图 2。除了几个微架构单元之外,您还需要为每个逻辑核心复制一个架构状态。许多结构可以在线程之间共享,但不是所有结构(否则 SMT 将与上下文切换相同)。
  • @CrakC 我现在明白你的意思了。我想当英特尔提到“执行资源”时,他们实际上一定是指问题队列和功能单元。有时,用自己的术语解读它们的含义可能是一场噩梦。
【解决方案2】:
  • 并发是任务执行的一种方式。它的替代方案是顺序执行。
  • 并行性是一种设计任务的方法。它的替代品是 Serial。
  • 超线程是一种硬件辅助的执行机制,其中处理器的某些部分(即硬件)被复制以加快执行速度1。它的替代品可以是任何 90 年代的旧硬件(因为超线程首次出现在 2002 年 2 月2)。

如果没有超线程硬件,我们可以有并发,前提是确实有多个任务可以同时执行。如何?以进程 P1 和 P2 为例,它们可以安全地并发执行并获取一个核心(称为 C)。 P1C 上运行 1 个时间段,然后 P2C 上运行另一个时间段,然后是 P 1C 上运行下一个时间片,以此类推。

只有一个核心C - 没有超线程 - 我们并发执行 P1 和 P2.


如果没有超线程硬件,我们可以有并行性,如果有一个可以并行执行的任务,并且我们有多个内核可以并行运行该任务。将 Mapping 作为 Mapreduce 的一部分。

假设您有两个要读取的文本文件,您已经启动了两个映射器,并且您有两个非超线程物理内核。在这种情况下,您可以(并且可能会)在没有任何超线程的情况下并行运行映射器。每个映射器都将从自己的文本文件中读取,将在自己的内核上运行并生成自己的映射输出。

有 2 个内核 - 没有超线程 - 我们并行执行一个任务。


结论:超线程是一种硬件改进,可以成功地脱离并行和并发。



1 通过减少需要复制的数据量来有效地执行上下文切换。

2It first appeared in February 2002 on Xeon server processors and in November 2002 on Pentium 4 desktop CPUs.

*A good SO answer about Parallelism and Concurrency 指出并发就像是一个杂耍者在玩很多球。不管看起来如何,杂耍者一次只能接/扔一个球。并行性是让多个杂耍者同时玩球。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多