历史位概念的实现
历史位用于记录分支历史。处理器采用四种不同的方案之一来实现历史位,如图所示。在最简单的方案中,历史位位于I缓存中。
例如,α处理器在每个指令的I缓存中提供一个(21064)或两个(21064A)历史位。相反,UltraSparc每个缓存行(包含四个指令)只维护两个2位条目。Sparc架构维护延迟槽,因此在四个后续指令中最多只能出现两个分支(和两个延迟槽)。
在PowerPC 604中,有一个512个条目的BHT,组织为128 x 4个条目,每个条目有两个历史位。BHT由指令提取地址访问,并提供属于同时从I缓存提取并加载到解码队列的四个指令的四个条目。预测逻辑评估与分支指令对应的历史位。
PowerPC 604采用隐式预测和显式2位预测。隐式预测是一种首选的预测技术,因为它允许在没有任何惩罚的情况下访问正确猜测的已采取路径,并且易于实现。
隐式预测的问题是它需要完全关联的实现。但是,完全关联结构的高成本将大多数当前实现中的BTAC或BTIC的大小限制为32-256个条目。使用隐式预测的处理器也配备了更高效但“更慢”的预测技术。
例如,让我们讨论如何在PowerPC 604和PowerPC 620处理器中实现多重预测。在这些处理器中,隐式预测与2位预测相结合。生成的猜测如表所示。
PowerPC 604 (1995)和620 (1996)处理器中实现的隐式预测和2位预测的组合
BTAC | 2位预测结果 | 总体预测 |
---|---|---|
命中 | 无关紧要 | 已采取 |
未命中 | 已采取 | 已采取 |
未命中 | 未采取 | 未采取 |
PowerPC 604具有64个条目的BTAC和512个条目的BHT,而PowerPC 620的相应值为BTAC中的256个条目和BHT中的2K个条目。
当BTAC中存在用于引用的提取地址的条目时,即BTAC命中,则总体预测为“已采取”,而不管2位预测的结果如何。如果没有BTAC中对应的条目,则未命中,则使用2位预测的结果作为总体猜测。
当总体“已采取”预测来自BTAC命中时,604和620的已采取惩罚均为零。相反,如果总体“已采取”预测是在BTAC未命中情况下,从2位预测中得出的,则PowerPC 604的“已采取”惩罚为1-2个周期,而PowerPC 620的惩罚仅为1个周期。