流水线是怎样提高性能的,会遇到什么问题,解决方法是什么。
(1)指令执行基本分为取指,译码,执行,访存,写回,根据寄存器的特性可以不断的将一个时序过程分解成若干个子过程。
(2)多条指令重叠进行操作,每个过程都能有效的与其他子进程同时进行。这样可以提高处理器处理效率,争取在一个时钟周期中完成一条指令。
会遇到的问题:
包括数据冒险和控制冒险。
处理数据冒险时:
- (1)使用暂停来避免冒险 ,也就是让指令停留在译码阶段,知道其源操作数的指令通过了写回阶段,具体做法是在执行阶段插入一个气泡。
- (2)使用转发来避免数据冒险
直接将结果值从流水线阶段传到更早点阶段 - (3)加载和使用数据冒险
而处理控制冒险时,
在执行阶段中,指令会改变条件码。我们在下一个周期往译码和处理阶段中插入气泡,并同时取出跳转指令后面的指令,这样就能取消(有时也称为指令排除)那两条预存错误的指令。
https://blog.csdn.net/fuhanghang/article/details/83421254
https://www.cnblogs.com/fengliu-/p/9269387.html
https://www.jianshu.com/p/85d6e4678fe9
https://blog.csdn.net/zxjoke/article/details/105435824
https://www.cnblogs.com/lfri/p/10053598.html
https://cs.nju.edu.cn/swang/CompArchOrg_13F/slides/lecture25.pdf
原文链接: https://dashen.tech/2020/03/16/一条指令的执行过程/
版权声明: 转载请注明出处.