超线程与超标量执行

时间:2019-04-11 15:48:03

标签: cpu hyperthreading superscalar

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

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

例如,如果一个CPU有2个内核,每个内核有2个执行单元,那么它的硬件并发性(它可以真正并行执行的线程数)不应该是4吗?当SMT并未真正启用真正的并行执行时,为什么它的硬件并发性却由逻辑核的数量来给出?

1 个答案:

答案 0 :(得分:1)

您不能仅将指令塞入执行单元中。
如果需要两个2路SMT,则需要保留两个架构状态并获取两个指令流。

如果一家公司有100个开发人员,但只有两个项目经理,则它只能并行开发两个项目(但如果concurrently每天使PM转换项目,则可以{{3}}开发更多项目)。

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

该软件无权访问执行单元,这将产生循环参数(该软件需要EU执行,而EU需要该软件执行)。
CPU将尝试尽可能多地利用欧盟,以无序利用并推测可能的一切。
实际上,超线程只是使所有资源忙碌的一种方式(例如在无事可做时与另一个PM共享开发人员)。

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