什么是静态预测?


在**静态预测**技术中,分支采用“总是执行”或“从不执行”的方法。它可以通过调查目标代码的特定属性来进行静态预测。在实际实现中,静态预测要么基于操作码,要么基于位移,要么基于编译器提供的提示,如图所示。

**基于操作码的预测**是通过假设对于某些操作码分支将被“执行”,而对于其他操作码分支将被“不执行”来进行的。例如,在 MC 88110 和 PowerPC 601/603 处理器中使用了这种预测技术。如表所示,展示了如何在 MC 88110(Motorola,1991)中实现基于操作码的预测。

在 MC 88110(1993)中实现的静态预测


指令

指定条件指令代码的第 21 位预测

= 00不执行

≠01执行
Bcnd(条件分支)>01执行

<00不执行

≥01执行

≤00不执行

bb1(位设置分支)
执行

bb0(位清除分支)
不执行

此处理器提供了两种条件分支。第一种称为 bcnd,用于算术检查。第二种称为 bb1(位设置分支)或 bb0(位清除分支),用于布尔检查。如表所示,对于算术检查,条件 ≠0、> 和 ≥0 被假定为满足,因此预测为“执行”。相反,条件 =0、<0 和 ≤0 会导致“不执行”预测,并且第 21 位被重置。

**基于位移的**预测取决于位移的符号。如果 D < 0,则预测为“执行”,在相反的情况下,D≥0,则预测为“不执行”。这里的基本假设是,具有负位移的条件分支用作循环闭合分支。

最后,静态预测也可以从编译器的提示中得出。这种预测称为**编译器定向预测**。在这种情况下,编译器根据编译的控制结构类型或用户提供的提示进行预测。编译器的预测通过设置或清除条件分支指令编码中的一个位(称为**预测位**)来指示。

例如,在 PowerPC 架构中,条件分支编码的第 10 位是预测位。当这样指定时,基于操作码和基于位移的预测的结果将被反转。使用预测位的处理器示例包括 PowerPC 601 和 PowerPC 603。

另一个利用编译器定向预测的处理器是 PA 8000。在这种情况下,编译器定向预测是一个可用的选项。如果指定,它将逐页覆盖动态预测。

这种显著的解决方案使静态预测能够在为 PA 8000 重新编译的程序中使用,如果可以预期更高的预测率。另一方面,较旧的程序(如库例程)可以继续使用动态预测作为默认预测方法。

更新于: 2021-07-23

970 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.