2

我有一个项目将“SimpleScalar”中的 2 位分支预测器转换为 8 位分支预测器。这意味着我需要将 2 位预测器的源代码从“SimpleScalar”更改为像 8 位预测器一样工作。

我知道预测器是如何工作的,但我不知道如何使用 c 语言实现分支预测器。向我推荐一些 8 位分支预测器的实现。

4

2 回答 2

0

这组幻灯片很好地描述了 2 位分支预测。将其扩展到 8 位(我假设)意味着我们被允许使用 256 个状态的状态机,而不是 2 位情况下的 4 个来决定发生了什么。如果我们以逻辑方式扩展 4 状态案例,将有 128 个状态,我们预测分支将被采用,128 个状态不被采用……一种滞后。

我假设您正在处理器模拟器或模拟器中编程。你没说。C 代码只需要跟踪最近做出的 128 次决策,并且只有在 128 次猜测错误时才切换到备用预测:

static int stickiness = 128;          // assume 128 states of knowledge that the default branch will occur
static int predicted_branch = 1;      // default prediction is (say) branch taken

if (simulated_branch_condition_is_true != predicted_branch) {
  if (--stickiness <= 0) {
    predicted_branch = simulated_branch_condition_is_true;
    stickiness = 128;
  }
}
// Now simulate the predicted_branch. If it's wrong, we will later simulate a pipeline, flush etc.

没有更多信息,这是我能做的最好的。

于 2012-11-21T04:48:19.653 回答
0

如果我在 SimpleScalar 中的“2 位分支预测器”在两级自适应预测器的实现中没有弄错,现在我不确定我是否理解“8 位分支预测器”的意思,神经分支预测器的概念非常有前途。大多数最先进的分支预测器都使用感知器预测器。您可能会发现查看基于带有感知器的动态分支预测的 C 语言实现很有用,该实现可在https://github.com/sumitdhoble/Branch-Prediction上作为源代码获得

于 2012-11-20T21:46:36.203 回答