【问题标题】:Branch mispredictions分支错误预测
【发布时间】:2013-10-09 02:26:59
【问题描述】:

这个问题可能很傻,但我还是会问。
我从thisMysticial 的回答中听说了分支预测
我想知道是否有可能发生以下情况

假设我有这段 C++ 代码

while(memoryAddress = getNextAddress()){

  if(haveAccess(memoryAddress))
    // change the value of *memoryAdrress
  else 
    // do something else

}

因此,如果分支预测器在某些情况下错误地预测 if 语句为真,然后程序更改 *memoryAddress 的值,是否会发生不好的情况? 会发生分段错误之类的事情吗?

【问题讨论】:

    标签: branch-prediction


    【解决方案1】:

    处理器内部的分支预测器被设计成没有功能上可观察的影响。

    分支预测器不够复杂,无法每次都正确处理,无论您是否尝试欺骗它。如果每次都是正确的,那就是总是执行分支的方式,它不会是“预测器”。

    在继续执行的同时仍然计算分支的条件,如果条件结果不是预测值,则不会将任何内容提交到内存中。执行回到正确的分支。

    【讨论】:

    • 我了解分支预测器无法始终正确处理以及分支预测器如何工作的一般概念。我想了解您所描述的“设计为没有功能上可观察到的效果”的部分
    • @LanPac 恕我直言,我认为您不想知道分支推测是如何工作的。如果预测器是一个简单的 1 位事件,它非常平庸,并且不会改变讨论。您似乎想知道投机执行是如何工作的(如果您不深入细节,这也是相当平庸的)。正如我或多或少所说的那样,“如果结果证明根本不需要这项工作,那么工作所做的任何更改都会被还原,结果将被忽略。” en.wikipedia.org/wiki/Speculative_execution
    猜你喜欢
    • 2019-05-10
    • 2015-09-25
    • 2014-04-25
    • 2014-03-03
    • 1970-01-01
    • 2016-07-01
    • 2011-02-01
    • 2015-11-24
    • 2016-02-05
    相关资源
    最近更新 更多