【发布时间】:2013-11-14 10:31:07
【问题描述】:
我正在研究管道危险的示例,并正在查看来自following document 的问题 2
我找到了this,这有点帮助。
据我了解,这些策略的工作方式如下:
- 停止直到一切都知道:将停止直到到达 MEM2 阶段完成。据我了解,这是最简单的策略,所有 => 5,5,5 的停顿周期都是相同的。
- 假定未采用:将仅假定该分支未采用。在这种情况下,当采用分支时,您将不得不停止 IF1 阶段之后的所有内容 => 7,0,7
- 假设采取:大致是#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