【发布时间】:2018-09-22 00:01:32
【问题描述】:
考虑这两种方法:
- 动态双峰:
- 我们有 4 个阶段,每个阶段 2 个阶段(采取或未采取),每次算法预测错误时交替进行,在连续 2 次错误预测后从采取未采取变化。
- 静态未采取:
- 这里的算法将始终预测采用或未采用。在每个错误的预测之后在两个阶段之间切换。
我在 C 中使用以下代码测试了这两种算法:
for(i=0; i<4; i++) {
}
并分析if 条件。
for(i=0; i<4; i++) {
if( i%2 ) {
}
else {
}
}
在这两种情况下,它们都是偶数(预测正确/错误的次数相同)。
是否有任何可能的简单算法使双峰比不采用更好?
【问题讨论】:
-
你称它为“Static Not Taken”,但描述听起来像是带有 1 位饱和计数器的动态预测。它是哪一个?此外,最好显示汇编(伪)代码。计数器的初始状态也很重要。当你说“我测试了这两种算法”时,你是怎么做到的?
-
动态预测在错过分支时总是交替进行,
static not taken将始终预测未采取。还没有在程序集中,首先我需要找到一个代码,其中BImodal (Dynamic 2 bits)会比Static not Taken更好。我正在纸上测试它并计算双峰更好地预测何时分支和何时不分支的 porcetage%。我从Extreme/Strong not Taken开始 -
好的,所以
static not taken实际上是指未采用静态,因为您在问题中说“总是预测采用或未采用。在每个错误预测后在两个阶段之间交换。”那部分是令人困惑。 -
@HadiBrais 你是对的。对不起,伙计!
标签: cpu-architecture branch-prediction speculative-execution