前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机指令的流水线执行与流水线冒险

计算机指令的流水线执行与流水线冒险

作者头像
叶茂林
发布2023-11-19 08:47:18
2710
发布2023-11-19 08:47:18
举报

计算机指令流水线 

流水线方式的洗衣房可以以并行的方式提高性能

 计算机执行指令,同样可以以流水线的方式并行

MIPS 流水化的数据通路

流水线冒险

下一周期不能按时执行下一条指令

结构冒险

数据冒险

一条指令依赖于前面某条执行的计算结果

add  s0, t0, t1 sub  t2, s0, t3

下一条指令需要气泡停顿等待前面计算出结果 

前推/旁路(forwarding/bypassing)

不要等待计算结果保存到目的寄存器,增加一条额外数据通路,将计算的结果直接传给下一条指令计算的输入

前推+阻塞 

 但是并非所有冒险都能通过前推来避免气泡停顿

lw  s0, 20(t1) sub  t2, s0,

在需要使用前一个指令的结果时,前一个指令还没有拿到结果,此时需要停顿一下 

还可以通过调整指令的顺序来避免阻塞等待

控制冒险 

分支预测

更有效的分析预测

在遇到跳转语句的时候,我们往往需要等到MEM阶段才能确定这条指令是否跳转(通过硬件的优化,可以极大的缩短分支的延迟,将分支执行提前到ID阶段,这样就能够将分支预测错误代价减小到只有一条指令),这种为了确保预取正确指令而导致的延迟叫控制冒险(分支冒险)。

为了降低控制冒险所带来的性能损失,一般采用分支预测技术。分支预测技术包含编译时进行的静态分支预测,和执行时进行的动态分支预测。

BTB(Branch Target Buffer)

动态分支预测中的BTB(Branch Target Buffer)技术。

BTB即为分支目标缓冲器,它将分支指令(对应的指令地址)放到一个缓冲区中保存起来,当下次再遇到相同的指令(跳转判定)时,它将执行和上次一样的跳转(分支或不分支)预测。

一种可行的BTB结构示意图如下:

在采用了BTB之后,在流水线各个阶段所进行的相关操作如下:

注意,为了填写BTB,需要额外一个周期。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 计算机指令流水线 
  • 流水线冒险
    • 结构冒险
      • 数据冒险
        • 前推/旁路(forwarding/bypassing)
        • 前推+阻塞 
      • 控制冒险 
        • BTB(Branch Target Buffer)
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档