wormhole side-predictor 针对的是嵌套循环中难以预测的分支。
这类循环分支的特点是其方向和外层循环先前迭代中的分支结果有关,而不是内部循环中最近的分支结果。因此这样一个分支的方向流看起来是不规则的,把模式看作连续的时难以预测。
这种交叉迭代行为激发了对分支预测器如何管理局部历史的重新思考:作者建议将历史表示为多维矩阵而不是线性向量。
WH所针对的分支特点
图1是对这类分支的举例:B1每次执行的方向与上次外循环迭代中该次内循环的分支方向相同(因为外循环没有影响内循环的判断条件)。若是用全局历史模式匹配,中间会包括许多无关分支,而掩盖潜在的相关性,使预测变得困难;若使用局部历史,这样的预测器必须为内循环的每次迭代记录足够长的历史模式。
Wormhole Predictor
LP-TOTAL:内部循环迭代的次数;
LP-CURR:目前迭代的次数;
使用包含来自过去迭代和当前迭代流的位的历史片段来识别相关性。
WH预测包括以下四个阶段:
1. 识别TAGE-SC-L经常错误预测的分支
利用TAGE-SC-L预测器中本来的SC(statistical corrector)部件和loop部件,首先识别TAGE是否经常错误预测一个分支,且该分支在SC中不存在偏差,再判断loop部件中是否包括该分支的表项且LP-TOTAL不为0,则表示该分支(1)是在一个循环内;(2)TAGE不能有效对其预测。则将该分支视为WH的候选分支。
一旦识别一个分支为候选分支,WH为其在wormhole prediction table(WPT)中分配一项。WPT中的表项按序排列,每当统计校正器认为某个分支有问题时,它的条目在排名中就会上升一位,若WPT满则替换排序最低的项。
2. 检测当前循环嵌套的维度
每当循环预测器部件中出现一个分支,全局寄存器LP-TOTAL被更新,如果该循环当前在执行中,则LP-TOTAL存储该循环的总迭代次数,当该循环结束,LP-TOTAL被清零。因此,LP-TOTAL中总是存放着当前最内层循环的总迭代次数。
3. 记录局部分支历史
识别到候选分支和循环迭代次数后,记录该分支的局部历史。WH预测表项如图4所示。“length”决定了最长历史,一个置信度计数器跟踪WH预测情况以判断是否用其预测结果覆盖其他预测器的结果。
4. 学习2D模式
WH下一步是从压缩了过去和当前迭代记录的2D历史空间中进行模式识别。
构建一个包含来自内部(水平)和外部(垂直)循环的先前迭代的局部分支结果的历史字符串。如图5所示,横向表示内部循环,纵向表示外部循环,“?”黑色方框表示本次预测,在4KB配置中,使用局部历史记录中位置为0,LP-TOTAL,LP-TOTAL-1,LP-TOTAL-2的四个预测方向组成索引。在32KB配置中,额外使用局部历史记录中位置为1,2*LP-TOTAL,2*LP-TOTAL-1,2*LP-TOTAL-2的四个预测方向组成索引。使用这些历史位索引查找图4所示的预测表。
只要WH预测表中置信计数器(conf)为正且模式的饱和计数器符合如下等式,则WH预测结果优先级高于TAGE预测结果。
上式中的 sat_value 是5-bit 饱和计数器中的值。
Q:为什么要这样判定?
只有WH和TAGE的预测结果不同时才更新每项的置信计数器,WH预测正确则增加,否则减少。