超純量
超标量CPU的设计使得在单个CPU内部实现了一种叫做指令级并行的并行计算形式,它可以在相同的时钟速率下完成更多的工作。这意味着CPU在一个时钟周期内通过在重复的功能单元上同时运行多条指令(称为指令调度)来执行多条指令。每个功能单元只是CPU核心内部的一个执行资源,比如算术逻辑单元(ALU)、浮点单元(FPU)、位移位器或乘法器。
大多数超标量CPU也是管道化的,但也有可能拥有一个非管道化的超标量CPU或一个管道化的非超标量CPU。
超标量技术是由CPU核心的几个功能支持的。
- 指令来自于有序的指令列表。
- CPU硬件可以计算出哪些指令有哪些数据依赖。
- 每个时钟周期可读取多条指令
标量处理器运行的每条指令一次改变一个或两个数据项,但矢量处理器执行的每条指令同时处理许多数据项。超标量处理器是两者的混合体。
- 每条指令处理一个数据项。
- 每个CPU核内部有多个重复的功能单元,这样就有多条指令同时处理独立的数据项。
在超标量CPU中,指令调度器从内存中读取指令,并决定哪些指令可以并行运行,将它们调度到CPU内部可用的多个重复功能单元上。
超标量CPU设计关注的是如何提高指令调度器的准确性,并使其始终保持多个功能单元的忙碌。截至2008年,所有通用CPU都是超标量的,一个典型的超标量CPU可能包括多达4个ALU、2个FPU和2个SIMD单元。如果调度员不能让所有的单元都忙起来,CPU的性能就会降低。
CRAY T3e并行计算机的处理器板,有四个超标量Alpha处理器。
简单的超标量流水线。通过一次获取和调度两条指令,每个周期最多可以完成两条指令。
局限性
Superscalar CPU设计的性能提升受限于两点。
- 指令列表中内置的并行性水平。
- 派遣员和数据依赖性检查的复杂性和时间成本。
即使在普通的超标量CPU内部给定了无限快的依赖性检查,如果指令列表本身有很多依赖性,也会限制可能的性能提升,所以代码中内置的并行量是另一个限制。
无论调度器的速度有多快,同时调度多少条指令是有实际限制的。虽然硬件的进步会让每个CPU核有更多的功能单元(如ALU),但检查指令依赖性的问题会增加到一个极限,即可实现的超标量调度极限有点小。--可能在五到六条同时调度指令的数量上。
替代品
- 同步多线程:通常简称为SMT,是一种提高超标量CPU整体速度的技术。SMT允许多个独立的执行线程,以更好地利用现代超标量处理器内部的可用资源。
- 多核处理器:超标量处理器与多核处理器的不同之处在于,多个冗余功能单元不是整个处理器。单个超标量处理器由ALU、整数乘法器、整数移位器、浮点单元(FPU)等高级功能单元组成。每个功能单元可能有多个版本,以实现许多指令的并行执行。这与多核处理器不同,多核处理器同时处理来自多个线程的指令,每个核心一个线程。
- 管道式处理器:超标量处理器也不同于管道式CPU,多条指令可以并发在不同的执行阶段。
各种可供选择的技术并不是相互排斥的--它们可以(并且经常)在一个处理器中结合起来,所以设计一个多核CPU是可能的,其中每个核是一个独立的处理器,具有多个并行超标量管道。一些多核处理器还包括向量能力。
问题和答案
问:什么是超标量技术?答:超标量技术是基本并行计算的一种形式,通过同时使用多个执行单元,在每个时钟周期内可以处理一条以上的指令。
问:超标量技术是如何工作的?
答:超标量技术涉及指令按顺序进入处理器,在运行时寻找数据的依赖性,并在每个时钟周期加载一条以上的指令。
问:标量和矢量处理器之间的区别是什么?
答:在标量处理器上,指令通常一次处理一个或两个数据项,而在矢量处理器上,指令通常一次处理许多数据项。超标量处理器是两者的混合体,因为每条指令处理一个数据项,但不止一条指令同时运行,所以处理器同时处理许多数据项。
问:准确的指令调度器在超标量处理器中起什么作用?
答:准确的指令调度器对超标量处理器非常重要,因为它能确保执行单元总是忙于处理可能需要的工作。如果指令调度器不准确,那么一些工作可能不得不被丢弃,这将使它不比标量处理器快。
问:在哪一年,所有的普通CPU都变成了超标量?
答:所有普通的CPU在2008年成为超标量。
问:一个普通的CPU上可以有多少个ALU、FPU和SIMD单元?
答:在一个普通的CPU上最多可以有4个ALU、2个FPU和2个SIMD单元。