作为Nehalem架构的延续,Sandy Bridge沿用了Nehalem中的Clarkdale架构,在CPU中真正融合了GPU,PCI-E控制器整合到CPU内,用于和显卡直接通信,同时仍然会继续使DMI连接外部设备,履行原有南桥所要履行的任务,继续保持FDI接口,实现显示输出。不过,Sandy Bridge并没有采用共用DMI总线设计,从而提高了外部设备通信带宽。
Sandy Bridge架构的前端部分也重新获得优化设计。Sandy Bridge没有直接在指令拾取和预解码阶段进行改动,而是对整个前端部分进行了重新设计,通过革新的分支预测单元以及在解码阶段加入一个新的部件来增强整个前端部分的输出能力,同样达到了消除瓶颈的目的。
全新的分支预测单元
Sandy Bridge的L1 I-Cache也获得了改进,它从此前的Nehalem 4路组关联提升到了8路组关联,降低了Cache Line碰撞的几率,降低了页面冲突。而且,L1 I-Cache对应的L1 ITLB也略微扩大,2M/4MB对应的TLB表项从Nehalem的7+7提升到了8+8(对每一个硬件线程提供8个表项),可以覆盖更大的代码地址空间。
另一方面,Sandy Bridge的分支预测单元也在Nehalem的基础上进行了重新规划。通过对分支表结构的压缩定义,BTB(Branch Target Buffer,分支目标缓存)在同样容量下保存的分支目标能实现翻番。同样,GBH(Global Branch History,全局分支历史表)也能保存更多、更深的项目。这样一来,有助于提升性能又能降低能耗,避免无谓的分支代码执行带来的性能损失和能源浪费。
微处理器架构前端还有一个比较明显的变化是,加入了微指令缓存Uop Cache,它保存有经过解码的微指令,并且Uop Cache本身也支持指令的输出,从而帮助降低指令拾取延迟,让前端可以在更多的时间内处于持续输出4 uop/cycle的状态,这很大程度消除了Nehalem前端的瓶颈。
Sandy Bridge架构下的微指令缓存Uop Cache
在Nehalem微架构当中,ROB(ReOrder Buffer,重排序缓存)顺序保存了所有uop及其所有的重命名寄存器的数据和状态,架构寄存器则保存在RRF当中。在Sandy Bridge的PRF上,ROB不再保存重命名寄存器的数据,取而代之的是保存多个指向PRF的指针,架构寄存器包含在RRF当中,通过状态位来标识。
Sandy Bridge架构上的AVX指令集支持更多的操作数,支持的最大寄存器宽度也在前一代Nehalem基础上实现翻番,简化了结构,增大了ROB容量,进一步提升了乱序执行的性能。