取指令和译码单元
我们将处理器微架构按照功能分为几个部分分别对比它们之间的不同,首先我们来讨论取指令和译码单元部分。
![]() |
| 图4:取指令和译码单元 |
Yonah核心的取指令宽度为128bit,也就是大约4条32bit指令,这些指令会先存放于x86 Instruction Fetch Buffer中,这些指令会进入译码器转化为uops指令,然后进入到uop缓冲中执行uop Fusion(微操作融合)。可以看到Netburst这个部分的结构同Yonah有很大的不同,指令经过x86译码器可以转为4个uops,暂存在容量为12K的追踪缓存中,然后在微代码序列器的调度下进入到ROB中。追踪缓存的设计是Netburst架构的一个特色设计,它可以存储12K的uop,可以说是执行单元的源头,这个“大水池”能够确保Netburst管线始终得到充足的水源,从而体现较高效率。
Core微架构同Yonah最明显的区别是译码单元部分,它采用了4个x86译码器,包括1个复杂指令译码器和3个简单指令译码器,比Yonah增加了一个简单指令译码器。每个简单解码器可以处理一个uop,复杂解码器则可以处理由1-4个uops组成的指令(所以其解码样式被称为4-1-1-1)。微代码序列器(microcode sequencer)主要用于解码或者辅助解码多于4个uops的指令。与之相适应的是取指令宽度也会相应的增加,(推断)应该至少会是160bit。
Core微架构还提供了预译码(pre-decode)功能,结合取指令缓冲和译码单元可以提供macro-op fusion(宏指令融合)功能——这是Core微架构中增加的一项新功能。在Intel处理器中,x86指令被称为macro-ops,内部指令被称为uops。Macro-op fusion使得解码器可以将两个宏(macro)指令合成为一个uop,一般做法是把x86比较或者测试指令同x86跳转指令融合为一条uop,任何解码器均可执行这种优化。据说macro-op fusion可以降低约10%的uops数量,但是Intel并没有确认这些数据。
macro-op fusion从两个方面影响了性能。首先,完成同样的任务但是执行更少的指令会直接表现为性能的提升。其次,利用乱序执行窗口机制可以同时检查更多程序,从而找到更多可以并行执行的指令,从而提升乱序执行的效率这同uop fusion(微指令融合)所带来的好处非常的相似,但是它们改进的是不同类别的指令。macro-op和uop fusion使得x86微处理器多了些CISC的“风采”,而少了些RISC的“气质”。
三个架构都具有取指令单元(Instruction Fetch Unit),分支预测的动作即发生在这里。在Netburst微架构中利用分支目标缓存(Branch Target Buffer,BTB),分支地址计算(Branch Address Calculator,BAC)和返回地址堆栈(Return Address Stack,RAS)实现分支预测。Yonah核心集成了这些功能单元,另外增加了循环侦测器(Loop Detector,LD)和间接分支预测器(Indirect Branch Predictor,IBP),LD可以正确的预测循环的存在,而IBP则是根据全局历史来预测目标地址。Core微架构除了包括以上的所有功能之外,还增加了优先级设计。
