RISC-V MCU中文社区

【分享】 地址预测:RAS地址预测

发表于 全国大学生集成电路创新创业大赛 2023-05-30 13:52:36
0
1468
0

报名编号:CICC1740 团队名称:小型三极管
对于间接跳转指令,它们的目标地址通常来自于寄存器中的值,因此即使记录间接跳转指令当前的目标地址,当索引的寄存器中的值发生变化时,间接跳转指令的跳转地址也会发生变化。因此,使用BTB去保存间接跳转指令的目标地址没有太大意义。不过,大多数程序中的间接跳转指令都是用于处理函数的调用和返回。编译器会基于源寄存器和目的寄存器的编号编译出特殊的call和ret指令,这些指令的执行是有规律的。一般来说,在程序中使用call指令调用子程序的地址,然后程序会从子程序的首段开始取指。当子程序执行到末尾时,会出现一条ret指令,返回到之前的call指令的下一个地址对应的指令开始执行。call和ret指令通常是成对出现,支持嵌套的函数调用和返回机制。基于上述的规律,我们可以定义一个存储器,即后进先出的栈,又称为RAS(Return Address Stack)。RAS可以用来预测ret指令的目标地址。RAS 的预测基本原理图如下图所示。
图片alt
假设程序中有三个call指令分别调用MUL、SUB和ADD对应的地址,然后将执行过的指令的地址依次压入栈中。栈顶的地址就是ADD指令对应的地址。当ret指令出现时,将ADD对应的地址弹出作为ret指令的预测地址。当再次出现ret指令时,将SUB对应的地址弹出作为ret指令的预测地址。当最后一次出现ret指令时,将MUL对应的地址弹出作为最后的ret指令的预测地址。这样就返回到主程序开始执行了。

如果出现的间接跳转指令既不是call也不是ret,那么可以将它们存储在缓冲区中,并根据间接分支指令的执行情况进行缓冲区寻址。由于它们的目标地址只有固定几个,因此可以对间接跳转指令的目标地址进行预测。虽然间接跳转指令由于地址的变化可能会导致预测失败,但是在程序中这类指令的比例比较低,不会对性能产生过多影响。

喜欢0
用户评论
Damon_SCUT

Damon_SCUT 实名认证

知行合一

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板