我有一个项目将“SimpleScalar”中的 2 位分支预测器转换为 8 位分支预测器。这意味着我需要将 2 位预测器的源代码从“SimpleScalar”更改为像 8 位预测器一样工作。
我知道预测器是如何工作的,但我不知道如何使用 c 语言实现分支预测器。向我推荐一些 8 位分支预测器的实现。
我有一个项目将“SimpleScalar”中的 2 位分支预测器转换为 8 位分支预测器。这意味着我需要将 2 位预测器的源代码从“SimpleScalar”更改为像 8 位预测器一样工作。
我知道预测器是如何工作的,但我不知道如何使用 c 语言实现分支预测器。向我推荐一些 8 位分支预测器的实现。
这组幻灯片很好地描述了 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.
没有更多信息,这是我能做的最好的。
如果我在 SimpleScalar 中的“2 位分支预测器”在两级自适应预测器的实现中没有弄错,现在我不确定我是否理解“8 位分支预测器”的意思,神经分支预测器的概念非常有前途。大多数最先进的分支预测器都使用感知器预测器。您可能会发现查看基于带有感知器的动态分支预测的 C 语言实现很有用,该实现可在https://github.com/sumitdhoble/Branch-Prediction上作为源代码获得