Caching 分支预测器如何知道它是否不正确?

Caching 分支预测器如何知道它是否不正确?,caching,assembly,architecture,cpu,Caching,Assembly,Architecture,Cpu,这是我第二次问这个问题;第一次有人回复,但我花了太长时间回复,因此没有得到充分的理解 我想做的是更多地了解现代建筑的各个部分;我假设所有指令都是由分支预测器预测的,以便指令提取单元按照预测进行提取 另一位绅士试图帮助提及“分支指令”也与预测指令一起发送。这个“分支指令”测试分支预测器的预测是否正确。我还假设这些分支指令进入分支执行单元,不需要从内存加载任何内容 我不明白的是: 分支执行单元如何知道此指令的猜测是否正确 一旦知道它是正确的,会发生什么 分支指令是否在每次预测时发出(基本上是指……

这是我第二次问这个问题;第一次有人回复,但我花了太长时间回复,因此没有得到充分的理解

我想做的是更多地了解现代建筑的各个部分;我假设所有指令都是由分支预测器预测的,以便指令提取单元按照预测进行提取

另一位绅士试图帮助提及“分支指令”也与预测指令一起发送。这个“分支指令”测试分支预测器的预测是否正确。我还假设这些分支指令进入分支执行单元,不需要从内存加载任何内容

我不明白的是:

  • 分支执行单元如何知道此指令的猜测是否正确
  • 一旦知道它是正确的,会发生什么
  • 分支指令是否在每次预测时发出(基本上是指……每次进行预测时?)
  • 分支预测必须在预测指令之前还是之后
  • 分支指令是否需要从内存加载任何数据?如果是,是什么

谢谢

我认为要回答您的问题,您首先需要了解分支预测是如何工作的。为了解释这一点,首先必须知道为什么它会做出这些预测。这需要了解现代处理器中的流水线是如何工作的。对我来说,最好的解释方法是从非流水线CPU如何处理指令开始

(如果我回顾一下你已经知道的事情,请耐心听我说。你对分支预测的困惑是从哪里来的还不完全清楚。)

旧的CPU,连同许多简单的现代CPU,以一种相当直接和明显的方式处理指令。它们将执行指令所需的操作分解为一系列步骤。每一条指令都是通过这些步骤运行的,一旦完成了所有这些步骤,它就会进入下一个步骤。例如,假设一个简单的非流水线CPU可能遵循以下一系列步骤:

  • 将指令提取到内存中
  • 读入指令的操作数
  • 执行该指令的操作
  • 写出结果
  • 以这种方式实现CPU相对简单,但它对处理器资源的利用效率非常低。当CPU执行执行和指令过程中的一个步骤时,用于执行其他步骤的所有硅都处于空闲状态

    现代流水线处理器试图通过将执行指令所需的步骤序列转换为类似于流水线的方式来提高效率。指令执行一系列的步骤或阶段,就像在非流水线CPU中一样。区别在于,一旦一条指令在管道的第一级被清除,CPU就可以向下发送另一条指令。这允许多条指令同时在管道中,希望保持芯片的所有部分都得到很好的利用。虽然一条指令仍然需要经过许多不同的阶段,但理想情况下,指令会一个接一个地快速从管道中出来。流水线并没有缩短从开始到结束执行指令的时间,相反,它缩短了指令执行之间的时间

    现在,这是对现代流水线的一个相当简单的描述,它掩盖了一些使现代流水线CPU设计复杂化的问题。然而,就分支预测而言,只需要解决一个复杂问题:执行分支指令时要做什么

    首先,分支指令本身没有什么特殊的需要。它可以像其他任何东西一样被扔进管道。一旦清除了第一级,CPU就可以发送下一条指令,问题就出在这里。下一个指令是什么?因为它是一个分支,所以它可以走两种不同的方式,直到分支指令通过管道完成它的旅程,CPU才知道是哪种方式

    处理器要做的简单事情就是等待。由于在管道等待时没有其他指令输入到管道中,因此管道将清空。只有当分支指令退出现在为空的管道时,CPU才能恢复将指令放入。下一条指令必须通过现在为空的管道的所有阶段,导致分支指令完成与下一条指令完成之间的延迟。在这种情况下,指令不会像理想情况下那样连续快速退出管道

    这种延迟在现代处理器上可能相当大,它是管道中的阶段数的函数,基本上每个阶段一个周期。大多数现代x86 CPU的管道中大约有15个阶段,因此以这种方式实现分支的成本非常高。一个简单的CPU和一个很短的管道可能可以摆脱总是等待,但现代处理器必须做些别的事情。他们做出预测

    最简单的预测形式是静态分支预测。处理器只查看分支指令本身,以猜测是否接受它。静态预测的最简单形式是假设不采用所有分支,因为这种情况经常发生。更高级的静态预测器假设向后的分支被采用,向前的分支不被采用。这使得我们假设向后的分支是循环,并且循环通常执行多次

    静态预测可以很好地工作,但它仍然会做出很多糟糕的预测。您可以通过采用某种动态分支预测来改进这一点。有各种不同的方法可以做到这一点,对许多人来说