【问题标题】:Pipeline branch prediction performance example管道分支预测性能示例
【发布时间】:2013-11-14 10:31:07
【问题描述】:

我正在研究管道危险的示例,并正在查看来自following document 的问题 2

我找到了this,这有点帮助。

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

  1. 停止直到一切都知道:将停止直到到达 MEM2 阶段完成。据我了解,这是最简单的策略,所有 => 5,5,5 的停顿周期都是相同的。
  2. 假定未采用:将仅假定该分支未采用。在这种情况下,当采用分支时,您将不得不停止 IF1 阶段之后的所有内容 => 7,0,7
  3. 假设采取:大致是#2的倒数;当分支不被占用时,你将不得不停止超过 IF1 阶段 => 0,7,0

我不确定我的理解是否正确。如果有人可以批评我的解决方案并告诉我我的想法是否正确或解释我的错误之处,我们将不胜感激。

EDIT1:回答问题

1) 你希望什么时候知道你是对的(分支决议)?

相信你会通过EX步骤知道分支解析。

2) 你希望什么时候知道你想在什么时候选择分支(对还是错)?

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

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

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

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

如下所示: I# = 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 个停顿,而在没有分支的情况下,您将获得 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

【问题讨论】:

  • 您应该问自己两件事 - 当您假设某事(采取/未采取)时 - 您希望何时知道自己是否正确(分支决议)?当你想开分店时(无论是否合法)——你什么时候知道地址? (虽然后者似乎不是这个问题的一个因素)
  • 感谢您的意见。这可能是我的理解不正确的地方。我在 EDIT1 中按照我的理解(可能是错误的理解)回答了这些问题。让我知道哪里/如果我的理解需要澄清。
  • 所以当你等待分辨率被知道时,你不能在条件测试指令完成 EX之前开始,即使那是假设你已经从EX转发到如果。
  • 我现在根本不关注你,我很抱歉。我读得越多,我就越困惑。让我们尝试逐个策略地分解问题,因为我觉得在给出具体示例时思考这些问题更有帮助。请参阅 EDIT2 - EDIT4,它将代表三种策略。感谢您的耐心等待,因为我发现这些东西很难掌握。
  • 另外,我的理解是正确的,就摊位而言,分支是有条件的还是无条件的都不会影响事情?

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


【解决方案1】:

您知道这是 Decode 中的跳转,您知道 AGen 中的跳转目标,因此您可以比条件分支更早地解决跳转。

我相信“假设未采取”意味着您总是预测 PC+4。如果您的代码中没有采用分支,则您的管道不会出现气泡。如果您遇到跳转或分支,则必须终止错误推测的指令,并重定向 PC。

我相信“假设采用”意味着一旦您意识到您正在采用一个分支并且有一个要跳转的目标,您就会采用该分支(并终止其背后假设的错误推测指令)。这为您节省了 AGen 和 Exe 之间的循环。但是,如果未采用分支,则会出现不良行为,因为您需要将 PC 重定向回之前的状态。

【讨论】:

  • “解决跳跃”是什么意思?这是否意味着“知道它何时发生”?实际上:您知道在 ID 阶段发生了跳转,但直到 AG 阶段您才知道是否发生了分支?我理解正确吗?
  • 跳转可以在 AGen 的末尾重定向 IF,因为它有跳转地址(并且它是无条件的,所以跳转将发生)。因此,一旦跳转命中 AGen,重定向 IF 并终止 IF1/IF2/ID 中的指令(因为它们被错误推测了)。诚然,我发现 when 分支得到解决的问题模棱两可。我最初认为分支在 Exe 之前不会知道它的方向,但 Exe 仅在设置条件代码时(通过前一条指令);当检查条件代码时,我没有看到您的问题解释。最早可以重定向的分支是 AGen。
  • 另外,我想知道 store 是如何处理的,因为除非你知道它是非投机的,否则无法提交 store。如果 AGen 解决了分支,那么一切都很好。
  • 这种效果实际上会如何停止?跳跃是否会在“假设采取”时停止,只是不会持续那么多周期?
猜你喜欢
  • 2016-09-14
  • 2012-08-28
  • 2021-08-19
  • 2020-12-16
  • 2022-11-20
  • 2019-12-13
  • 2020-02-12
  • 2014-04-25
  • 2014-03-03
相关资源
最近更新 更多