从2位分支预测器到8位预测器

时间:2012-11-12 02:27:26

标签: c architecture parallel-processing

我有一个项目可以在' SimpleScalar'中转换2位分支预测器。到8位分支预测器。这意味着我需要从' SimpleScalar'更改2位预测器的源代码。并使其像8位预测器一样工作。

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

2 个答案:

答案 0 :(得分:0)

如果我在Two-level adaptive predictor的实现中没有弄错你的SimpleScalar中的“2位分支预测器”,那么现在我不确定我是否理解你对“8位brach预测器”的意思,神经分支预测概念非常有前途。大多数现有技术分支预测器都使用感知器预测器。您可能会发现基于Dynamic Branch Prediction with Perceptrons的基于https://github.com/sumitdhoble/Branch-Prediction的源代码的{{3}}查看C语言的实现很有用

答案 1 :(得分:0)

This set of slides很好地描述了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.

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