首先我们可以明确的指出,毫无疑问,Core 微架构是一个比 NetBurst 微架构或者 Yonah
微架构更宽的设计。下图是这三代微架构在前端的比较,三者的解码单元的构成可以初步表明这一点:Core 微架构拥有4组解码单元,每周期可以生成7条微指令;Yonah
微架构拥有3组,每周期可以生成6条微指令;而 NetBurst 微架构由于解码方式不同,不容易比较解码单元的数目,但是我们可以知道,NetBurst
微架构每周期只能生成3条微指令。
Intel 三代微架构前端对比
在对 Core 微架构的解码单元进行详细介绍之前,我们先来了解一下 Yonah 微架构的解码单元。实际上,Yonah
微架构基本上是沿用了古老的 P6
微架构的解码单元设计,采用3组解码单元,由2组简单解码单元和1组复杂解码单元组成。其中2个简单解码单元负责处理对应1条微指令的简单X86指令,而1个复杂解码单元负责处理对应4条微指令的复杂X86指令,这样的解码单元每周期最多能生成6条微指令。P6
微架构的这种历史久远的解码方式被形象的称为“4-1-1”规则。
实际上,这种把简单指令与复杂指令分而治之的做法,并非是 P6
微架构的专利。从全世界第一个流水线化的X86处理器——80486开始,为了加速简单指令的执行,这原则就已经开始主导所有高速X86处理器的微架构。就算是号称提供三组“完整解码单元”的
AMD K7、K8 处理器,实际上也有类似的限制。
不过,Yonah 微架构在指令解码单元上的改进,以及 SSE 指令解码方式的改变,却带给我们另一个思考的方向。与原始的 P6 微架构不同,Yonah
微架构的2组简单解码器都可以进行128bit SSE 指令的解码。而在过去,这只有复杂解码单元才能胜任。换言之,如果 Core
微架构的所有4组解码单元都具备了这样的能力,结合更强的微指令融合技术和宏指令融合技术(见后文),Core
微架构的解码单元的实力将几乎等同于“4-2-2-2”,甚至“4-4-4-4”。
Core 微架构把解码单元增加到4组,这个变化可以说是 Core 微架构最大的特色之一。自从 AMD 失败的 K5
设计之后,已经有超过十年的时间,X86处理器的世界再也没有出现过4组解码单元的设计。因为X86指令集的指令长度、格式与定址模式都相当混乱,导致X86指令解码器的设计是非常困难的。Intel甚至在
NetBurst 微架构的设计中引入 Trace Cache
来取代占用大量晶体管的复杂解码单元。而增加解码单元,特别是复杂解码单元,固然会大大增强处理器的解码能力,但是解码单元复杂的电路也必然会提高内核的复杂度和处理器的功耗。
在处理器频率不可能达到 NetBurst
微架构那种高度的前提下,为了能显著提高处理器的性能,最有效的途径就是增加执行单元的数量。就像你将在后文看到的那样,Core 微架构执行单元的数量比 Yonah
微架构增加了50%。而仍然采用与 Yonah 微架构相同的3组解码单元是不可能“喂饱”这样庞大的执行资源的。所以,我们甚至可以说,Intel
是“被逼”选择增加解码单元的数量的。权衡利弊,Intel 最终选择了增加1组简单解码单元的折衷方案。至少从最终的效果来看,这样的选择还不算差。
为了配合这超宽的4组解码单元,Core 微架构的取指单元也需要加宽。Intel
没有透露取指单元的具体宽度,但是我们可以从其它指标中估计出这个数字:Core
微架构每个周期可以解码最多5条指令,而X86指令的平均长度大约为32bit,因此取指单元的宽度至少为160bit。目前有一种尚未得到证实的说法声称,Core
微架构取指单元的宽度为192bit,仅供参考。
取回的指令被送到预解码缓冲区,该缓冲区还存放了关于指令长度和解码边界的信息。预解码缓冲区至少可以容纳10条X86指令,很可能可以容纳更多(Intel
也没有透露更加具体的数字)。
现在让我们总结一下 Core 微架构的解码单元:Intel 在 Core 微架构上取消了 NetBurst
微架构上的有些令人失望的追踪缓存(Trace
Cache),而是安置了多达4个解码单元,其中,有3个简单解码单元来处理对应1条微指令的简单X86指令,而1个复杂解码单元来处理对应4条微指令的复杂X86指令。并且,与
Yonah
微架构一样,所有的SSE指令都可以被简单解码单元处理,生成1条微指令。我们可以把解码部分简单的总结为“4-1-1-1”方式。此外,如果遇到非常复杂的指令,复杂解码单元还可以借助旁边的微码存储器(Microcode
Sequencer),取得微指令序列。
(责任编辑:刘伟) |