首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管道支路预测性能实例

问管道支路预测性能实例
EN

Stack Overflow用户
提问于 2013-11-03 19:21:47
回答 1查看 1.2K关注 0票数 0

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

​

​

我找到了这,它在某种程度上起到了帮助作用。

据我所知,这些战略的运作方式如下:

  1. 停止直到一切都知道:会停止直到到达MEM2阶段完成。据我所知,这是最简单的策略,所有=> 5,5,5的失速循环都是相同的。
  2. 假设不被占用:只会假设分支没有被占用。在这种情况下,当获得分支时,您将不得不暂停通过IF1阶段=> 7,0,7的所有东西。
  3. 假设为:将大致与#2相反;当分支未被占用时,您将不得不暂停通过IF1阶段=> 0,7,0

我不确定我的理解是否正确。如果有人能批评我的解决方案,告诉我我的想法是否正确,或者解释我哪里错了,我们将不胜感激。

EDIT1:回答问题

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

我相信你会知道分支的解决办法。

( 2)你期望什么时候知道什么时候你想去(对还是错)?

我相信你会知道什么时候你想按AG的步骤分支。

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

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

EDIT2:“等一切都知道了再说。”我的理解是,无论是有条件的还是无条件的,管道将在AG阶段开始停滞,并将继续停滞,直到EX阶段完成为止。意思:在所有情况下,它都要暂停4个周期。

如下所示: I# = IF#,M# = MEM#,ST = stall

代码语言:javascript
复制
Branch:    I1-I2-ID-AG-M1-M2-EX-WB   
Successor:    I1-I2-ST-ST-ST-ST-ID-AG-M1-M2-EX-WB

EDIT3:“假设不接受”。我的理解是,顾名思义,您假设每个分支(有条件的或无条件的)都被接受。这里唯一会发生的情况就是支行被占领的情况。这些摊档将与早些时候在同一个地方发生。因此,在这种情况下,在出现分支(有条件的或无条件的)的情况下,您将得到4个档位,而在不发生分支的情况下,则不会得到任何档位。

它看起来如下所示

代码语言:javascript
复制
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个暂停,但在分支(有条件的或无条件的)发生的情况下,没有一个。

它看起来如下所示

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-11-05 13:51:50

您知道这是解码中的跳转,您知道AGen中的跳转目标,所以您可以比条件分支更早地解析跳转。

我相信“假设不被接受”意味着你总是预测PC+4。如果代码中没有分支,则管道不会出现气泡。如果你击中一个跳转或分支,那么你必须杀死错误的指令,并重定向PC。

我认为,“假设已被接受”意味着,一旦你意识到你正在采取一个分支,并有一个目标跳转,你采取分支(并杀死它背后的错误推测的指示)。这将节省AGen和Exe之间的周期。但是,如果不使用此分支,则会出现不良行为,因为您需要将PC重定向到以前的状态。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19756992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档