首先吐槽Rechnerstruktur这门课懒惰的教授:Prof. Dr. Wolfgang Karl。老头子Folien不改动直接改日期拿来用就不提了,Korrelationsprädiktor这么重要的考试内容居然在Folien上只给了个名字,Übungsblatt里面这个题让我查资料查了两个多小时才搞懂。
正文开始:
(m, n)-关联-分支预测器是由以下两个部分组成:
一个m位-全局分支历史寄存器 (BHR: Branch History Register)
由m位移位寄存器构成,用于记录当前跳转的前m个实际分支行为历史,每一位用来记录该分支是否实际被执行,1对应实际执行,0对应实际未执行。
一个含有2^m个条目(Eintrag)的模式历史表 (PHT: Pattern History Table),每个条目对应一个n位-简单预测器。
若有m位的BHR,则存在2^m种不同的历史记录值。此时就需要一个含有2^m个条目的PHT来对应上述2^m种不同的历史记录值,每一个条目对应一个n位的简单预测器。
举例:m = 2,n = 2时,BHR有00、01、10、11四种不同的历史记录值。此时的PHT需要有4个条目,分别对应上述四种历史记录值,并且每一个条目代表一个2位的简单预测器。
BHR以及PHT里所有的条目对应的n位简单预测器都需要赋初始值才能够正常工作。在此处不涉及的是,由被预测的跳转命令所在地址的一部分,通常是低位的最后几个比特,来决定使用PHT里的哪一个区块,或者说哪一列。由BHR里面的历史记录值来决定应该在此次跳转处使用PHT中哪一个条目(哪一行)所对应的n位简单预测器。
举例:使用与上例相同的(2,2)-关联-分支预测器,若规定BHR里的历史记录初始值为00,则在预测第一个跳转时,使用PHT里的第0个,即编号为0的n位简单预测器。
之后的工作原理与简单预测器无异,在做题填表的时候有如下窍门:
- 先把实际的跳转都写出来,然后把旧历史和新历史两列先填好;
- 然后把BHR以及PHT中所有简单预测器的初始值都填进表里;
- 最后就按照简单预测器的工作原理一步一步把所有表填好就可以了;
参考文章:
CSDN博客:【体系结构】转移预测器设计与比较
维基百科: 两级自适应预测器
老哥真是帮我大忙了哈哈,这Folie看了半天没看明白。
不介意加个微信吗,我也是KIT学生哈哈