回顾历史,Intel的Pentium III处理器也是一个分水岭,之后移动与桌面就走向了两个不同的微架构,桌面的Netburst向超长管线发展,而移动处理器Pentium M走了另一条路。而现在的Core架构更多的是建立在Pentium M所走得道路上,所以我们必须了解这段历史。
我们知道Pentium III的微架构是基于RISC核心的,具有5个执行单元。另外它的管线(pipeline)长度是10 stage。Pentium M核心使用了类似的特征,但是要提高处理器的时钟频率需要使用更深的流水线。一般情况下加深流水线会降低CPU的指令执行效率,但是可以提高时钟频率。Pentium 4需要高精度的预测机制来减少分支失败和提高流水线的输出。
提高分支预测精度
当分支预测失败后流水线就会失效,现代CPU都可以同时处理和管理几个指令,它们可以乱序执行,但是当指令中包含分支时问题就出现了。哪个指令分支会被选择,这时就需要应用到CPU的分支预测机制,分支预测基于一些复杂的算法。分支预测机制会去判断那个分支将会被执行,假如CPU犯错,它违背了指令的顺序造成分支预测失败。分支预测失败后需要把流水线中无用的代码都清除掉,这个操作是很耗时间的,尤其是长流水线更是如此,这对CPU的性能是个严重的打击。因此超长流水线的CPU需要尽量避免出现分支预测失败的情况,这是一个很大的挑战,因此需要提高它们的分支预测的算法。 Pentium III CPU加入了两个分支预测机构,Pentium M使用了两个同样的分支预测机构,另外又增加了一个。
NetBurst提高了超标量处理的性能,这依赖于分支预测的精度。减少分支预测失败造成的性能损失有两种方法,一是采用类似Pentium4的“回溯缓存”(trace cache)技术,回溯缓存保存了解码后的微代码的执行次序,一但分支预测失败它能够使流水线返回失败前的断点。但是回溯缓存要使用不少的晶体管,会增加能源消耗,第二种方法是彻底抛弃回溯缓而努力去提高分支预测精度,这是Pentium M所采用的技术。