分支預測器:修订间差异

求闻百科,共笔求闻
添加的内容 删除的内容
(机器人:自动替换模板(来源模板);移除无用的模板参数)
(机器人:清理不当的来源、移除无用的模板参数)
 

(未显示同一用户的2个中间版本)

第21行: 第21行:
== 实现 ==
== 实现 ==
=== 静态预测 ===
=== 静态预测 ===
静态预测(Static prediction)是最简单的分支预测技术,因为它不依赖于代码执行的动态历史信息。代替地,它仅依赖于分支指令自身。<ref>{{Cite book | author=P. Shen, John; Lipasti, Mikko | title=Modern processor design: fundamentals of superscalar processors | url=https://archive.org/details/modernprocessord00shen | year=2005 | publisher=McGraw-Hill Higher Education | location=Boston | isbn=0-07-057064-7 | pages=[https://archive.org/details/modernprocessord00shen/page/n236 455]}}</ref>
静态预测(Static prediction)是最简单的分支预测技术,因为它不依赖于代码执行的动态历史信息。代替地,它仅依赖于分支指令自身。<ref>{{Cite book | author=P. Shen, John; Lipasti, Mikko | title=Modern processor design: fundamentals of superscalar processors | | year=2005 | publisher=McGraw-Hill Higher Education | location=Boston | isbn=0-07-057064-7 | pages=455}}</ref>


[[SPARC]]与[[MIPS]]的最早实现(作为第一代商用[[RISC]]体系结构处理器)使用单方向静态分支预测:总是预测条件跳转不发生,因此总是顺序取下一条指令推测执行。仅当条件跳转指令被求值确实发生了跳转,则非顺序的代码地址被加载执行。两种CPU都是在解码阶段评价分支指令,取指令占用1个周期。因此分支目标需要两个周期(即经过了取指令、解码两个周期)才能确定。两种处理器都会在分支指令进入流水线的执行阶段时,插入一个[[延迟间隙|分支延迟间隙]]。分支指令完成流水线的执行阶段,就已经能确定是否跳转,这时就可以决定是后续的顺序出现的指令被继续执行还是跳转到的新指令进入流水。
[[SPARC]]与[[MIPS]]的最早实现(作为第一代商用[[RISC]]体系结构处理器)使用单方向静态分支预测:总是预测条件跳转不发生,因此总是顺序取下一条指令推测执行。仅当条件跳转指令被求值确实发生了跳转,则非顺序的代码地址被加载执行。两种CPU都是在解码阶段评价分支指令,取指令占用1个周期。因此分支目标需要两个周期(即经过了取指令、解码两个周期)才能确定。两种处理器都会在分支指令进入流水线的执行阶段时,插入一个[[延迟间隙|分支延迟间隙]]。分支指令完成流水线的执行阶段,就已经能确定是否跳转,这时就可以决定是后续的顺序出现的指令被继续执行还是跳转到的新指令进入流水。
第27行: 第27行:
更复杂的静态预测假定向后分支将会发生,向前的分支不会发生。向后分支,是指跳转到的新地址比当前地址要低。这有助于配合经常出现的程序的循环控制结构。
更复杂的静态预测假定向后分支将会发生,向前的分支不会发生。向后分支,是指跳转到的新地址比当前地址要低。这有助于配合经常出现的程序的循环控制结构。


一些处理器允许分支预测提示出现在代码中。Intel [[Pentium 4]]就是如此。但这一特征在Intel此后的处理器中不再支持。<ref name=Fog_Microarchitecture>{{cite web | last = Fog | first = Agner | title = The microarchitecture of Intel, AMD and VIA CPUs | year = 2009 | url = http://www.agner.org/optimize/#manuals | accessdate = 2009-10-01 | | | }}</ref>
一些处理器允许分支预测提示出现在代码中。Intel [[Pentium 4]]就是如此。但这一特征在Intel此后的处理器中不再支持。<ref name=Fog_Microarchitecture>{{cite web | last = Fog | first = Agner | title = The microarchitecture of Intel, AMD and VIA CPUs | year = 2009 | url = http://www.agner.org/optimize/#manuals | accessdate = 2009-10-01 }}</ref>


静态预测也用于某些处理器分支动态预测没有任何可用信息时的一个最后的办法。Motorola [[PowerPC G4#PowerPC 7450 .22Voyager.22|MPC7450 (G4e)]]与Intel [[Pentium 4]]都是如此。<ref>[http://arstechnica.com/articles/paedia/cpu/p4andg4e.ars/4 The Pentium 4 and the G4e: an Architectural Comparison] , Ars Technica</ref>
静态预测也用于某些处理器分支动态预测没有任何可用信息时的一个最后的办法。Motorola [[PowerPC G4#PowerPC 7450 .22Voyager.22|MPC7450 (G4e)]]与Intel [[Pentium 4]]都是如此。<ref>[http://arstechnica.com/articles/paedia/cpu/p4andg4e.ars/4 The Pentium 4 and the G4e: an Architectural Comparison] , Ars Technica</ref>
第104行: 第104行:


=== 神经分支预测器 ===
=== 神经分支预测器 ===
1999年提出的神经分支预测器(neural branch predictor)<ref>{{Cite web |url=http://webspace.ulbsibiu.ro/lucian.vintan/html/USA.pdf |title=Towards a High Performance Neural Branch Predictor, Proceedings of The International Joint Conference on Neural Networks - IJCNN '99, Washington DC, USA, 1999. |accessdate=2012-09-09 |||}}</ref>。突出优点是能够利用很长的历史记录,仅导致了资源的线性增长。而传统预测器的资源需要量与历史长度是指数增长关系。这种方法主要缺点是高延迟。
1999年提出的神经分支预测器(neural branch predictor)<ref>{{Cite web |url=http://webspace.ulbsibiu.ro/lucian.vintan/html/USA.pdf |title=Towards a High Performance Neural Branch Predictor, Proceedings of The International Joint Conference on Neural Networks - IJCNN '99, Washington DC, USA, 1999. |accessdate=2012-09-09 }}</ref>。突出优点是能够利用很长的历史记录,仅导致了资源的线性增长。而传统预测器的资源需要量与历史长度是指数增长关系。这种方法主要缺点是高延迟。


神经分支预测器的准确度非常突出。(参见Intel's "Championship Branch Prediction Competition" <ref>{{Cite web |url=http://camino.rutgers.edu/cbp2/ |title=Championship Branch Prediction |accessdate=2012-09-09 |||}}</ref>)。Intel在[[IA-64]]的模拟器 (2003)中实现了这一方法。
神经分支预测器的准确度非常突出。(参见Intel's "Championship Branch Prediction Competition" <ref>{{Cite web |url=http://camino.rutgers.edu/cbp2/ |title=Championship Branch Prediction |accessdate=2012-09-09 }}</ref>)。Intel在[[IA-64]]的模拟器 (2003)中实现了这一方法。


== 历史 ==
== 历史 ==