【问题标题】:Hyperthreading vs. Superscalar execution超线程与超标量执行
【发布时间】:2019-04-11 15:48:02
【问题描述】:

想象一个超标量(多个执行单元)并支持超线程 (SMT) 的 CPU(或内核)。

为什么 CPU 可以真正并行执行的软件线程数通常由其拥有的逻辑内核(即所谓的硬件线程)数给出,而不是它拥有的执行单元总数?
如果我的理解是正确的,SMT 实际上并没有启用真正的并行执行,它只是通过复制 CPU 的某些部分(那些存储架构状态而不是主要执行资源的部分)来使上下文切换更快/更有效。另一方面,超标量架构允许每个时钟周期真正同时执行多条指令,因为 CPU 有多个执行单元,即多个并行管道,每个管道都可以以真正的并行方式处理单独的线程。

那么举个例子,如果一个 CPU 有 2 个核心,每个核心有 2 个执行单元,那么它的硬件并发(它真正可以并行执行的线程数)不应该是 4 吗?为什么 SMT 并没有真正实现真正的并行执行,而它的硬件并发性却是由逻辑内核的数量决定的?

【问题讨论】:

    标签: cpu hyperthreading superscalar


    【解决方案1】:

    您不能只是将指令灌输到执行单元中。
    如果您想要两个 2 路 SMT,您需要保持两个架构状态并获取两个指令流。

    如果一家公司有 100 名开发人员,但只有两名项目经理,它只能并行开发两个项目(但如果让 PM 每天左右切换项目,它可以concurrently 开发更多)。

    如果 CPU 只能从两个指令流中获取数据(只保留两个线程上下文),则可以只为其分配两个线程以并行执行。
    但是,您可以进行时间划分并同时执行更多线程。

    软件无法访问执行单元,这会产生循环论证(软件需要 EU 执行,但 EU 需要软件执行)。
    CPU 将尝试尽可能多地使用 EU,利用 Out-of-order 并尽可能多地进行推测。
    实际上,超线程只是让所有资源保持忙碌的一种方式(就像在开发人员无事可做时与另一个 PM 共享)。

    但是,如果一切都失败了并且没有使用 EU,那么可能的工作单元就被浪费了。

    【讨论】:

    • 感谢您的快速回答。你是说 EU 不是一个完整的、独立的 CPU 执行管道吗?可悲的是,我无法找到关于 EU 究竟是什么的明确解释,我读过的消息来源说它要么是单个内部单元,例如 ALU 或 FPU,而其他人则说它指的是一组内部组件(例如,内部控制序列单元、寄存器、ALU+FPU 等。换句话说,一个完整的流水线,可以在其中插入指令)。你对此有何看法?再次感谢。
    • @AdmiralAdama 这两个定义基本上是等价的。 EU 是一个接受输入(操作数)并产生结果的电路。在这两种情况下,EU 的输入都是操作数(常量、架构寄存器)而不是指令,这就是为什么您仍然需要 EU 周围的所有其他东西。 EU 没有一个精确的定义,CPU 中实际将输入转换为输出的部分称为 EU。作为门的同步网络,EU 可以具有内部(不可见)寄存器、稀疏控制逻辑等,并且通常是流水线的。但它不能获取、解码和退出指令。
    • 好吧,听起来 EU 只是指一个 ALU/FPU/etc.,而不是包含 ALU/FPU/etc 的成熟管道,还有其他几件事 outside 说ALU/FPU,可以处理指令。您的定义还将解释为什么 EU 不 = 额外的硬件线程,这是我最初的 Q。不过,有趣的是 #logical cores 是硬件并发性的度量,因为 SMT 不启用 true 同时执行。我想它已经足够接近了,因为有实际的硬件支持硬件线程(允许存储架构状态和闪电般的快速上下文切换)?
    • @AdmiralAdama 实际上是这样。 SMT 被定义为并行执行或整个并行管道。在 Intel 的 CPU 上,只有前端的第一阶段(可能只是获取和预解码)不是真正的并行(细粒度垂直线程和粗粒度线程的混合)。后面的阶段是并行处理两个线程的指令。这要归功于管道中的各种队列(例如前端的 IQ 和 IDQ)。发生的情况是单个 4/6/7 路管道正在独立于源处理两个线程的指令。
    • 啊,好吧,我理解你的评论错误。我想我理解正确。使用 SMT,当将指令塞入其中时,单个流水线可以“看到”并从两个线程中进行选择(由于具有两种架构状态),这使得超标量 CPU 的 b/c 效率更高,这允许 CPU 每个周期执行更多操作。换句话说,在没有 SMT 的情况下,每个周期可以利用更多(几乎所有)CPU 的内部部件/资源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多