看起来太简单了一个问题要问,但是在经历了两个ppts之后我问过。
这两种方法都会增加指令吞吐量。而Superscaling几乎总是使用流水线技术。 Superscaling有多个执行单元,流水线也是如此,或者我错了吗?
答案 0 :(得分:55)
超标量设计涉及处理器能够在单个时钟内发出多条指令,并具有执行指令的冗余设施。我们在一个核心内谈论,请注意 - 多核处理是不同的。
流水线将指令分为几个步骤,由于每个步骤都在处理器的不同部分执行,因此每个时钟可以有多个指令处于不同的“阶段”。
他们几乎总是一起使用。来自维基百科的这张图片显示了正在使用的两个概念,因为这些概念最好以图形方式解释:
这里,在五阶段管道中一次执行两条指令。
根据你最近的编辑,进一步细分:
在上面的示例中,指令经过5个阶段才能“执行”。这些是IF(取指令),ID(指令解码),EX(执行),MEM(更新存储器),WB(写回缓存)。
在一个非常简单的处理器设计中,每个时钟都会完成一个不同的阶段,所以我们有:
哪个会在五个时钟中执行一条指令。如果我们再添加一个冗余执行单元并引入超标量设计,我们就会有两个指令A和B:
五个时钟中的两个指令 - 理论最大增益为100%。
Pipelining允许部件同时执行,因此我们最终会得到类似的内容(对于十条指令A到J):
在九个时钟中,我们执行了十条指令 - 你可以看到流水线真正移动的地方。这是对示例图形的解释,而不是它在字段中实际实现的方式(即黑魔法)。
Superscalar和Instruction pipeline的维基百科文章相当不错。
答案 1 :(得分:32)
很长一段时间以前,CPU一次只执行一条机器指令。只有当它完全完成时,CPU才会从内存(或稍后的指令缓存)中获取下一条指令。
最终,有人注意到这意味着大多数CPU在大多数时间都没有做任何事情,因为有几个执行子单元(例如指令解码器,整数算术单元和FP算术单元等)并且正在执行一条指令只让其中一人忙碌。
因此,“简单”流水线诞生了:一旦一条指令完成解码并继续执行下一个执行子单元,为什么不能获取并解码下一条指令?如果您有10个这样的“阶段”,那么通过让每个阶段处理不同的指令,理论上可以将指令吞吐量提高十倍而不增加CPU时钟!当然,当代码中没有条件跳转时,这只能完美地工作(这导致了特别处理条件跳转的额外努力)。
后来,由于摩尔定律的持续时间比预期更长,CPU制造商发现自己有更多的晶体管可以利用并思考“为什么每个执行子单元只有一个?”。因此,超标量具有多个执行子单元并且能够并行相同事物的CPU 诞生了,并且CPU设计变得更加复杂得多在这些完全并行的单元上分配指令,同时确保结果与指令顺序执行的结果相同。
答案 2 :(得分:10)
答案 3 :(得分:6)
在CPU中,流水线操作完全相同。 “指令”分解为执行的各个阶段,通常类似于1.获取指令,2。获取操作数(读取的寄存器或存储器值),2。执行计算,3。写入结果(到存储器或寄存器) 。最慢的可能是计算部分,在这种情况下,通过此管道的指令的总吞吐速度只是计算部分的速度(就好像其他部分是“空闲的”。)
微处理器中的超标量是指能够一次并行地从单个执行流中运行多个指令的能力。因此,如果一家汽车公司运行两条装配线,那么显然它们可以生产两倍的汽车。但是,如果将序列号放在车上的过程是在最后阶段并且必须由一个人完成,那么他们将不得不在两个管道之间交替并保证他们可以在一半的时间内完成每个管道。最慢的阶段,以避免自己成为最慢的阶段。
微处理器中的超标量类似,但通常有更多的限制。因此,指令获取阶段通常会在其阶段产生多个指令 - 这使得微处理器中的超标量成为可能。然后将有两个获取阶段,两个执行阶段和两个写回阶段。这显然不仅仅是两条流水线。
这一切都很好,但是从声音执行的角度来看,如果盲目地完成这两种技术可能会导致问题。为了正确执行程序,假设指令按顺序一个接一个地执行。如果两个顺序指令具有相互依赖的计算或使用相同的寄存器,则可能存在问题,后一条指令需要等待前一条指令的写回完成才能执行操作数获取阶段。因此,您需要在执行之前将第二条指令拖延两个阶段,这首先会破坏这些技术所获得的目的。
有很多技术可以用来减少需要停顿的问题,但是我会列出它们:1。寄存器转发,(也存储到加载转发)2。注册重命名,3。得分 - 登机,4。无序执行。 5.使用回滚(和退役)的推测执行所有现代CPU都使用几乎所有这些技术来实现超标量和流水线。然而,在停顿变得不可避免之前,这些技术相对于处理器中的管道数量往往具有递减的回报。实际上,没有CPU制造商在一个核心中制造超过4个流水线。
多核与任何这些技术无关。这基本上是将两个微处理器组合在一起,在单个芯片上实现对称多处理,并且只共享那些有意义共享的组件(通常是L3缓存和I / O)。然而,英特尔称之为“超线程”的技术是一种尝试在单核的超标量框架内虚拟实现多核语义的方法。因此,单个微架构包含两个(或更多)虚拟内核的寄存器,并从两个(或更多个)不同的执行流中获取指令,但是从公共超标量系统执行。这个想法是因为寄存器不能相互干扰,所以往往会有更多的并行性导致更少的停顿。因此,不是简单地以一半的速度执行两个虚拟核心执行流,而是由于停顿的整体减少而更好。这似乎表明英特尔可以增加管道数量。然而,已经发现该技术在实际实现中有些缺乏。但是,由于它是超标量技术的组成部分,我无论如何都提到过它。
答案 4 :(得分:2)
流水线操作是在同一周期同时执行多个指令的不同阶段。它基于将指令处理分成多个阶段,并为每个阶段和寄存器分别存储中间结果。
Superscaling将多个指令(或微指令)分派给CPU中存在的多个执行单元。因此它基于CPU中的冗余单元。
当然,这种方法可以相互补充。