什么是更好的分支预测器?双峰还是Gshare?

时间:2014-03-28 21:36:05

标签: performance cpu-architecture computer-architecture branch-prediction

仅仅是为了我个人的知识...

Bimodal或Gshare这两者中的哪一个提供的正确预测比另一个更正确?为什么呢?

1 个答案:

答案 0 :(得分:2)

对于预测变量,没有“更好”这样的东西,你可以问一个给定的工作负载/应用程序,或者像基准套件这样的一组表现更好(错误预测更少)。性能还取决于参数(表大小,历史长度等)。

这两者是完全不同的,每个都可以更好地适应不同的场景。你可以说双峰可能学得更快,碰撞更少,但全局变体更精细,更有机会捕捉复杂的模式。然而它有更高的碰撞,因为表格代表了各种部分历史,并且在某些情况下收敛的机会较低。

最好用这个例子展示强弱点:

for (i=0; i<N; ++i) {
    if (A[i] < 50) 
        do_stuff();
    if (A[i] > 50)
        do_other_stuff()
}

分支是数据相关的(假设数据在[1..100]中均匀随机分布),因此双峰不可能捕获它们。然而,全局预测器将很容易知道第二个分支取决于第一个分支的结果(如果第一个分支取得,第二个分支将永远不会被采用,如果第一个分支不采取,则第二个分支很可能被采取( A[i]==50的情况只有1%的几率)。 现在采用相同的代码,但假设A已经排序,双峰将轻松获胜,几乎所有预测都正确,除了少数转换。

因此,如果没有预测者优越,我们该怎么办?好吧,当然要建立一个混合型!今天许多高性能CPU使用多个CPU,尽管结果中的组合/选择算法可能无法在线获得。

这种解释也忽略了尺寸和功耗等设计含义 - 这些当然也取决于实现的参数。