存储器:
解决了处理时间的不平衡
6阶段还是时间不一样的
两阶段时只会有第一阶段的浪费;但是六阶段时,会导致更多阶段的浪费
d
:
d:
d:两个执行阶段中间的延迟
第一条指令:完整执行,需要
k
t
kt
kt的时间
剩余
n
−
1
n-1
n−1条指令,只需要多一个
t
t
t的时间,总共就是
(
n
−
1
)
t
(n-1)t
(n−1)t
所以
T
=
k
t
+
(
n
−
1
)
t
T = kt + (n-1)t
T=kt+(n−1)t
n
∗
k
∗
t
n*k*t
n∗k∗t:n条指令,k个阶段,每个阶段是
t
t
t
加速比是一个大于1的数字
已进入流水线的不同指令在同一时刻访问相同的硬件资源
解决方案:
Dm:处理数据
Im:处理指令
但寄存器较贵,且有可能访问相同的寄存器。类比数据Cache和代码Cache是分离的一个指令需要使用之前的运算结果,但是结果还没有写回
和结构冒险不同,可以执行下去,只是执行结果会发送错误r1
在add
指令中是一个输出的结果,但是又是其他指令中输入的数据,在sub
中的r1
没有更新
第三条nop
可以略去,一个上升沿写入,一个下降沿读。硬件上不需要做任何修改
缺点:
缺点:
bubble
前递:forwarding
ALU
中,新的r1
其实已经获得了。第一个的ALU
的输出是在第二个的ALU
的输出之前的**ALU**
是复用的,刚算完,又重新给自己。
bypassing 旁路
,从旁边传数据过来;forwarding 前递
缺点:
无法解决 一条指令使用之前指令的访存结果Load-Use Harzard
.
左边的案例:
bubble
右边的案例:可以通过交换顺序减少等待
影响:
不是完备的解决方案
尝试猜的更对 – 预测
两层嵌套for
循环十分常见,所以采用两次错误i=1,j=10
,预测不发生,预测正确,到第二层嵌套,再次预测不发生,预测错误。
静态预测,两种方式是并用对同一种方式更好。
看看曾经有没有预测过:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务