管道分支预测性能示例

时间:2013-11-03 19:21:48

标签: computer-science pipeline computer-architecture pipelining branch-prediction

我正在研究管道危险的例子,我正在查看following document

中的问题2

Question 2

我发现this在某种程度上有所帮助。

据我了解,策略的工作方式如下:

  1. 失速直到一切都已知:将停止直到达到MEM2阶段完成。据我了解,这是最简单的策略,停顿周期对于所有=>都是相同的。 5,5,5。
  2. 假设没有采取:只假设没有采取分支。在这种情况下,当采取分支时,你将不得不停止通过IF1阶段=>的所有内容。 7,0,7
  3. 假设:大致是#2的倒数;当没有采取分支时,你将不得不停止IF1阶段=> 0,7,0
  4. 我不确定我的理解是否正确。如果有人可以批评我的解决方案并告诉我,如果我的想法是正确的或解释我错在哪里,那将非常感激。

    EDIT1:回答问题

    1)你什么时候想知道什么时候你是对的(分支机构解决方案)?

      

    我相信你会通过EX步骤知道分支分辨率。

    2)你什么时候想知道什么时候你想要分支(对或错)?

      

    我相信你会知道什么时候你想通过AG步骤进行分支。

    3)你什么时候知道地址?

      

    我相信你会知道AG步骤后的下一个地址。

    EDIT2:“失速,直到一切都知道。”我的理解是,无论是否采用分支(有条件的或无条件的),管道将在AG阶段期间开始停止并且将继续停止直到EX阶段完成。含义:在所有情况下都必须停止4个循环。

    它看起来如下: 我#= IF#,M#= MEM#,ST =停止

    Branch:    I1-I2-ID-AG-M1-M2-EX-WB   
    Successor:    I1-I2-ST-ST-ST-ST-ID-AG-M1-M2-EX-WB
    

    EDIT3:“假设没有采取”。我的理解是,顾名思义,您假设每个分支(有条件的或无条件的)都被采用。在这里发生的唯一失速将是采取分支的情况。摊位将发生在与之前相同的地方。因此,在这种情况下,在分支(有条件或无条件)发生的情况下,你会得到4个摊位,如果没有,则没有摊位。

    它看起来像下面的

    Branch: I1-I2-ID-AG-M1-M2-EX-WB
    Taken:     I1-I2-ST-ST-ST-ST-ID-AG-M1-M2-EX-WB
    Not:       I1-I2-ID-AG-M1-M2-EX-WB
    

    EDIT4:“假设已经采取”。这基本上与之前的策略相反。在没有分支的情况下会有4个摊位,但在分支(有条件或无条件)发生的情况下没有。

    它看起来像下面的

    Branch: I1-I2-ID-AG-M1-M2-EX-WB
    Not:       I1-I2-ID-AG-M1-M2-EX-WB
    Taken:     I1-I2-ST-ST-ST-ST-ID-AG-M1-M2-EX-WB
    

1 个答案:

答案 0 :(得分:1)

你知道它是Decode中的一个跳跃,你知道AGen中的跳跃目标,所以你可以比条件分支更早地解决跳跃。

我相信"假设没有采取"意味着你总是预测PC + 4。如果代码中没有采用分支,则管道不会出现任何气泡。如果你跳过跳跃或分支,那么你必须杀死错误的指令,并重定向PC。

我相信"假设拍摄"意味着一旦你意识到你正在接受一个分支并且有一个目标要跳转到,你就拿走分支(然后杀掉它背后假定的错误指定的指令)。这样可以节省AGen和Exe之间的周期。但是,如果不使用分支,则会出现性能不佳的情况,因为您需要将PC重定向回原来的状态。