CPU Wiki: Sandy Bridge Microarchitecture 后端

在这里插入图片描述
Execution Engine
Sandy Bridge 的后端执行单元处理乱序执行。Sandy Bridge的back end将NetBurst和P6进行了融合。像P6一样,Sandy Bridge 独立的处理三种类型的uOPs(浮点,整型和向量)。然而实现的方式却十分不同。Sandy Bridge 借鉴了NetBurst中更加高效的追踪tracking和重命名renaming架构。


Sandy Bridge 以下简称SNB使用了NetBurst中基于物理寄存器文件(PRF)的重命名机制进行追踪。在之前的处理器,一直到Westmere的P6微架构,使用Retirement Register File(RRF)和重命名缓冲区ROB,用于追踪还在处理中的micro-ops和数据。ROB的结果在退休时写入RRF。SNB回到了使用PRF的技术,意味着所有的数据都是存到PRF。PRF中存储着各种各样的信息,包括状态信息。需要指出SNB引入了将寄存器扩展到256bit的AVX技术。考虑到复杂的大量的加法计算将会对整个设计起到副作用,采用基于PRF的重命名架构更可能是一个硬性的要求。不像RRF,使用PRF可以将退休变得非常的简单,只是需要在架构寄存器和物理寄存器之间的一个简单的映射改变,减小了数据的传输。否则的话,如果是新的256bit的AVX技术,那么会有大量的数据移动,毫无疑问导致性能恶化。此外,寄存器重命名表,Register Alias Tables (RAT) 用于将逻辑寄存器映射到物理寄存器。这包括架构状态和最新的预测执行状态。在SNB中,Reorder Buffer(ROB)仍然存在,但是是一个非常简单的单元,用于追踪在处理中的uOPs和他们的状态。除了这些后端的架构上的改变,Intel也增加了大部分的buffer的size,使得更多的uOPs可以在in-flight。

Renaming & Allocation
每周期可以从前端发射双线程中之一的4条uops。如前所述,Re-Order Buffer 现在是一个轻量级的器件,用于追踪正在流程之中的uOPs。 Sandy Bridge中的ROB有168项,比Nehalem多了40项。这个阶段的Pipeline中,uOPs仍然是顺序执行的。uOP依次占用ROB。ROB中的entry用于追踪正确的执行顺序和状态。为了让ROB能够重命名一个整型数uOP,需要有可利用的整型PRF项。与此类似,FP和SIMD uOPs都需要有可利用的FP PRF项。在重命名之后,只要uOP的依赖关系解决掉就可以开始执行了。
在这个阶段,架构寄存器被映射到物理寄存器。其他的记录任务在此时也需要完成,比如分配load,store的资源和决定可以利用的调度端口。寄存器重命名也被Register Alias Table(RAT)所控制,用于记录uOPs所依赖的数据的来源(也是重命名过的寄存器)。SNB使用基于PRF的重命名机制也可以相当程度上减少功耗。随着可以使用256bit的新的指令集的加入,退休操作将会使256bit的数值无意义的移动到物理寄存器。这在SNB中彻底解决掉了。将RAT/ROB和PRF解耦可能会增加一些延迟,但是受益要多的多。
涉及到融合uOPs的操作在执行单元或者退休单元时,没有特别的代价。融合的两个uOPs可以只占用一个ROB项,但是相对于Nehalem,重命名寄存器翻倍了,用于兼容那些fused 操作。RAT可以每周期处理4条uOPs。需要注意的是,ROB仍然可以运行在融合的uOPs,因此4uOPs可以达到高达8uOPs的效率。
由于SNB是预测执行的,它可能预测错误。当此时,架构状态就会失效,需要回滚回到上一次有效的状态。SNB有一个48项的Branch Order Buffer(BOB)用于追踪记录那些信息。

Optimizations
Sandy Bridge,在指令进入out-of-order和重命名单元之前,进行了一些优化。其中两个优化是Zeroing Idioms 和 Ones Idioms。第一个常用的是Zeroing Idioms优化或者称为去依赖Idioms。一定数量的zeroing idioms 被识别出来然后移除掉。这是在ROB记录之前执行的,是的这些uOPs可以节约资源,整体的移除它们,并且去除了依赖关系。移除zeroing idioms是0延迟的,并且直接彻底的移除了流水线(比如退休了)。
在这里插入图片描述
Sandy Bridge 将比如XOR,PXOR和XORPS这样的指令,如果其操作数和目标数相同,识别为zeroing Idioms。这些优化在renaming(每周期4uops)期间,以相同的速度优化完毕。架构寄存器是直接被简单的设置为0(不适用真实的物理寄存器)。
Ones Idioms是另一个可以移除依赖关系的idioms。所有的PCMPEQX指令都是与其自身寄存器进行比对,通常是将所有的位设置为1。在那些case中,尽管uOP仍然需要执行,指令却可以立刻被调度,因为不需要知道当前寄存器的状态。

Scheduler
在ROB记录单元之后,uOPs就会被发送到调度器。这里所有的都可以乱序执行,只要依赖关系被解除,那么uOP就可以执行。Sandy Bridge 有一个非常大的统一的调度器,可以在两个线程之间实现动态的切换。调度器是之前的Nehalem的保留站的1.5倍大小,共54项。当然Reorder Buffer也扩大了。使用统一的调度器有着可以将uOPs更灵活的混合在一起的优势,可以实现更加高效、更高吞吐量的设计。
Sandy Bridge 有着两个独立的物理寄存器组(PRF)。64bit的数据值存放在160项的整型PRF之中;浮点和向量数据存入已经扩展到256bit的向量PRF文件中,为了兼容新的AVX YMM寄存器。向量寄存器组144项深度,略微低于整型的160项深度。值得指出的是,在SNB之前的Intel架构中,读取常量寄存器是一个瓶颈,每周期被限制到3个读取。SNB已经移除了这个限制。
此时,uOP已经不再是融合状态的,可以独立的分配到不同的执行单元。调度器将会保留这些uOPs,直到它们开始执行。一个uOP的操作数如果一直没有到达,那么它会持续地等待。比如它在等待从内存中读取数据或者是其他的uOP的计算结果,或者是执行单元正忙。一旦uOP准备好了,它们就会被分派入指定的端口。
在这里插入图片描述
调度器将会发送最老的,已经准备好的uOP到六个端口上。SNB像Nehalem一样,有6个端口。Port0,1和5用于执行计算操作。每个端口有三组独立的执行单元,对应着三组数据类型:整型,SIMD整型和浮点类型。整型执行单元处理64bit的通用寄存器操作。SIMD整型和浮点执行单元都是128bit宽度。
每个计算簇都是工作在自己的域中。域的划分帮助减少不常用簇的功耗,也简化了路由网络。在自己域内之间的数据流动(比如:integer->integer 或者是FP->FP)是无损耗效率的,每个周期都可以执行。不同的域之间的数据流动(比如integer->FP 或者FP->integer)需要额外的1到2个周期,以使数据被forward到恰当的域中。
SNB的port2,3,4 用于执行内存相关的操作,比如load和store。

New 256-bit extension
Sandy Bridge 引入了AVX指令,一种新的256bit x86浮点SIMD扩展。新的指令会用升级的Vector Extension(VEX) 前缀序列实现。这些指令大多数时候会被译码为单条uOP。
为了获得性能上显著的提升,Intel决定不重复他们最初的SSE的设计。Intel翻倍了所有相关的执行单元的位宽。这包括全硬件的256bit浮点乘法,除法以及shuffle,他们都只有单周期的延迟。
正如前面提到的,SIMD和FP计算单元都是128bit宽度。翻倍整个流水线是一个非常复杂的工作。引入256bit扩展的挑战就是能够在不被发现的情况下,翻倍计算单元的输出的带宽。Intel聪明的通过向两个已存在的128bit的计算单元队列同时发送AVX指令,来达到全256bit的计算。比如,一个256bit的浮点加操作可以利用整型SIMD域计算低128bit,FP域计算高128bit,实现完整的256bit。重用现有的datapath可以实现节省die面积以及节省功耗。
综上所述,SNB 相对于Nehalem,翻倍了FLOP,可以实现每周期的256bit的乘加法,也就是,SNB可以实现每周期16个单精度FLOP,8个双精度FLOP。

Scheduler & Execution Units
综上所述,SNB增强了被重新调整过的端口。比如,各种字符串操作被移动到端口0。另一个增强的就是LEA执行的能力。Port0和1都增加了额外的功能,比如integer blend。各种加入Westmere的安全措施也被增强了。

Retirement
一旦uOP或者是融合的uOPs已经执行完毕,uOPs就可以退休了。SNB可以每周期提交4条融合的uOPs。退休是顺序的,并且释放任何他们使用的资源,比如负责记录的reorder buffer。

欢迎关注我的公众号《处理器与AI芯片》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值