超线程与超标量执行

问题描述 投票:1回答:1

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

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

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

cpu hyperthreading superscalar
1个回答
1
投票

你不能只是将指令抨击到执行单元。 如果你想要两个双向SMT,你需要保持两种架构状态并获取两个指令流。

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

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

该软件无法访问执行单元,这将产生循环参数(软件需要EU执行,但EU需要软件执行)。 CPU将尝试尽可能多地使用欧盟,利用无序和推测它可以做任何事情。 实际上,超线程只是让所有资源保持忙碌的一种方式(比如在他们没什么可做的时候与另一个PM共享开发人员)。

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

© www.soinside.com 2019 - 2024. All rights reserved.