我正在研究管道危险的例子,并研究来自下列文件的问题2。

我找到了这,它在某种程度上起到了帮助作用。
据我所知,这些战略的运作方式如下:
我不确定我的理解是否正确。如果有人能批评我的解决方案,告诉我我的想法是否正确,或者解释我哪里错了,我们将不胜感激。
EDIT1:回答问题
( 1)你希望什么时候知道你是对的(分支决议)?
我相信你会知道分支的解决办法。
( 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-WBEDIT3:“假设不接受”。我的理解是,顾名思义,您假设每个分支(有条件的或无条件的)都被接受。这里唯一会发生的情况就是支行被占领的情况。这些摊档将与早些时候在同一个地方发生。因此,在这种情况下,在出现分支(有条件的或无条件的)的情况下,您将得到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-WBEDIT4:“假设已被接受”。这在本质上与以前的策略相反。在不发生分支的情况下,将有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发布于 2013-11-05 13:51:50
您知道这是解码中的跳转,您知道AGen中的跳转目标,所以您可以比条件分支更早地解析跳转。
我相信“假设不被接受”意味着你总是预测PC+4。如果代码中没有分支,则管道不会出现气泡。如果你击中一个跳转或分支,那么你必须杀死错误的指令,并重定向PC。
我认为,“假设已被接受”意味着,一旦你意识到你正在采取一个分支,并有一个目标跳转,你采取分支(并杀死它背后的错误推测的指示)。这将节省AGen和Exe之间的周期。但是,如果不使用此分支,则会出现不良行为,因为您需要将PC重定向到以前的状态。
https://stackoverflow.com/questions/19756992
复制相似问题