我正在研究管道危害的示例,并正在查看以下文档中的问题 2
我发现这有所帮助。
据我了解,这些策略的工作方式如下:
- 停止直到一切都知道:将停止直到到达 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 = Stall
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