计算机指令的流水线处理可以显著提升性能,类似于洗衣房的并行操作。
计算机指令同样可以采用流水线方式并行执行。

MIPS 流水线的数据通路设计

流水线中的冒险可能会导致下一周期无法按时执行下一条指令。
结构冒险
数据冒险 指的是一条指令依赖于之前指令的计算结果。
后续指令需要暂停等待前面的计算结果。
前推/旁路(forwarding/bypassing)技术无需等待计算结果存储到目标寄存器,通过增加一条额外数据通路,直接将计算结果传给下一条指令的输入。
前推结合阻塞技术,但并非所有冒险都能通过前推避免暂停。
当需要使用前一条指令的结果时,如果前一条指令尚未获得结果,就需要暂停。
还可以通过调整指令顺序来避免阻塞等待。
控制冒险 
分支预测

更有效的分析和预测
在遇到跳转语句时,通常需要等到MEM阶段才能确定是否跳转(通过硬件优化,可以大幅缩短分支延迟,将分支执行提前到ID阶段,从而将分支预测错误的代价减少到仅一条指令),这种为了确保预取正确指令而导致的延迟称为控制冒险(分支冒险)。
为了减少控制冒险带来的性能损失,通常采用分支预测技术。分支预测技术包括编译时的静态分支预测和执行时的动态分支预测。
BTB(Branch Target Buffer)动态分支预测中的BTB(Branch Target Buffer)技术。
BTB即分支目标缓冲器,它将分支指令(对应的指令地址)存储在一个缓冲区中,当再次遇到相同的指令(跳转判定)时,它将执行与上次相同的跳转(分支或不分支)预测。
一种可能的BTB结构示意图如下:
在采用BTB后,流水线各阶段的相关操作如下:
需要注意的是,为了填写BTB,需要额外一个周期。
以上就是计算机指令的流水线执行与流水线冒险的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号