分支(branch) 按照跳转类型分为
- 条件conditional 跳转
- 无条件 unconditional跳转
按照分支地址的类型分为: - 直接跳转分支 direct branch 在指令中包含分支地址,因此只能跳转到特定的地址
- 间接跳转分支 undirect branch 是通过读取内存中的内容进行跳转, 这时内存中的内容是任意的,因此可以跳转到任意的地址
常见的BTB是通过Program Pointer进行索引,PC经过hash之后,对应到特定唯一的Branch Target中。
在面向对象语言的多态的特性中,我们在使用父类指针指向派生类对象中实现的虚函数。由于派生类可以包含各个类型,这样实际上跳转的地址的潜在的个数就是派生类个个数。这样早先的BTB这样一对一的索引就不适用了。因此该Paper提出了专门用于Indirect Jump的Target Prediction。
SPECint95(Paper是1997年的)中indirect jump的个数如下图所示:

Paper所实现的Target Cache可以理解为使用分支地址与历史信息进行Hash,使用得到的结果,索引Target Cache。
该结构包含以下两个维度:

博客介绍了分支按照跳转类型和分支地址类型的分类,包括条件与无条件跳转、直接与间接跳转。还提到常见的BTB索引在面向对象语言多态特性下的不适用,引出专门用于间接跳转的目标预测。阐述了Target Cache的访问方式和结构,最后给出在Perl程序上的运行结果。
最低0.47元/天 解锁文章
2596

被折叠的 条评论
为什么被折叠?



