7

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

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

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

4

1 回答 1

2

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

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

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

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

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

于 2019-04-12T10:19:42.587 回答