Core2 and Nehalem pipeline
(The microarchitecture of Intel, AMD and VIA CPUs https://www.agner.org/optimize/)
-
介绍:
- 相对于之前的PM的设计,流水线能够每周期处理四条微操作,执行单元由原本的64位宽变为128位宽
- Core2处理器有着两个或更多的CPU,每个CPU具有私有的L1 cache,共享的L2 cache。Nehalem则是私有的L1和L2 cache,L3 cache共享
- Nehalem的四核处理器在每个核上可以同时执行两个线程
- Core2同样存在power-saving策略,能够关闭部分未被使用的部分,例如内部总线,执行单元。当执行的工作负载较小时,时钟频率也会随之下降。在Nehalem可以支持提高某一个核的频率,如果其它的核都是空闲的。
-
流水线结构:
- Core2 据称只有14级流水线,以减少能耗,推测执行和分支错误预测的代价。
- 论文作者实验发现转移预测错误代价最小是15个周期。作者发现Core2的取指和提交部分相对于PM有了一定的改进,因此推测Core2增加了一级用于改善指令取指和预译码,增加了另外一级用于改善指令提交
- Nehalem的转移预测错误代价最小是17个周期,因此至少也要比Core2多两个流水级
- 根据Intel官方的文档介绍,Core2的ROB大小为96表项,Nehalem为128表项。Core2的RS具有32表项,Nehalem为36表项
-
指令取指和预译码
- 相对于之前的处理器,Core2在转移预测和指令取指之间增加了一个队列,以减少跳转分支带来的延迟问题。
- 取指带宽受到预译码的限制,每周期16B
- 预译码和译码阶段之间存在一个64B的队列。预译码主要工作是检测每个指令的开始位置(每条指令长度在1-15B),同时也要识别指令的前缀和指令的其它组件
- 预译码的最大吞吐量为每周期16B或者6条指令(两者之间最小的为准)。如果16B的代码块中超过了6条指令,则预译码器需要至少两个周期才能够加载下一个代码块。任何跨越了16B的代码块的指令需要被遗留到下一个代码块进行处理。ÿ