理解分支预测

时间:2016-04-07 18:09:59

标签: architecture arm branch-prediction

有一些关于分支预测的问题,我无法自信地弄清楚。假设我必须使用静态分支预测器。

  
      
  1. 管道的哪个阶段应该进行分支预测?
  2.   
  3. 如何知道预测出错了?数据路径是如何知道错误预测发生的?
  4.   
  5. 如果知道发生了错误预测,那么它如何发送信号来接收未被捕获的分支?
  6.   
  7. 在出错之后,我不得不接受之前未提及的地址。同时,如果发生了一些内存写入或寄存器写入怎么办?如何防止它发生?
  8.   

即使建议使用其中包含数据路径的正确引用,它也会非常有用。提前谢谢。

1 个答案:

答案 0 :(得分:2)

我想有许多不同的机制是可能的,但有一些快速的答案:

  1. 在获取阶段期间,在解码指令之前肯定需要进行分支预测。否则,您将解码不正确的说明。
  2. 您通常会使用预测的分支指令提供额外信息,例如预测的目标。分支将被执行,如果真实目标与预测目标不匹配,则需要冲洗管道。
  3. 这实际上取决于实施。如果执行分支,则可以使用真实目标,例如未预测的分支。
  4. 您肯定需要一种机制来恢复,或等待分支得到解决,直到您编写结果。这将花费一些时间,但不会像未预测的分支那么多。