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