一条指令的执行过程

流水线是怎样提高性能的,会遇到什么问题,解决方法是什么。

(1)指令执行基本分为取指,译码,执行,访存,写回,根据寄存器的特性可以不断的将一个时序过程分解成若干个子过程。

(2)多条指令重叠进行操作,每个过程都能有效的与其他子进程同时进行。这样可以提高处理器处理效率,争取在一个时钟周期中完成一条指令

会遇到的问题:
包括数据冒险控制冒险

处理数据冒险时:

  • (1)使用暂停来避免冒险 ,也就是让指令停留在译码阶段,知道其源操作数的指令通过了写回阶段,具体做法是在执行阶段插入一个气泡。
  • (2)使用转发来避免数据冒险
    直接将结果值从流水线阶段传到更早点阶段
  • (3)加载和使用数据冒险

而处理控制冒险时,

在执行阶段中,指令会改变条件码。我们在下一个周期往译码和处理阶段中插入气泡,并同时取出跳转指令后面的指令,这样就能取消(有时也称为指令排除)那两条预存错误的指令。



https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&srcqid=4748329612927156777&tn=50000022_hao_pg&wd=%E6%8C%87%E4%BB%A4%E6%89%A7%E8%A1%8C%E7%9A%84%E6%AD%A5%E9%AA%A4&oq=%25E6%258C%2587%25E4%25BB%25A4%25E6%2589%25A7%25E8%25A1%258C%25E7%259A%2584%25E4%25B8%2589%25E4%25B8%25AA%25E6%25AD%25A5%25E9%25AA%25A4&rsv_pq=f9a996740003e008&rsv_t=8df1wRqQOxGTXZ6t%2BgYkqNr1lIoI6a0wYzwHULruwzq3PqafZUTOWaJgRN6CG59Eme%2FbowES&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=3&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=481&rsv_sug4=978

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

文章目录