
2022考研智能择校择专业匹配系统入口 2022考研全年备考资料包免费下载入口
流水线中存在一些相关的情况,它使下一条指令无法在设计的时钟周期内执行。这些相关将降低流水线性能。主要有三种类型的相关会影响到流水线。(一)结构冒险
也称为硬件资源冲突,引起结构冒险的原因在于同一个部件同时被不同指令所用,也就是说由硬件资源竞争造成的。
通常,机器的指令都存储在同一个存储器中,因此两条指令是不能同时访问存储器的。如表1中,LOAD指令的MEM阶段与第i+3条指令的IF阶段同时使用存储器,则此时发生结构冒险。当结构冒险发生的时候,后续指令的相应阶段必须后移。

结构冒险的情形,通常的解决方案就是后续指令往后推迟。例如上表中的第i+3条指令因为与LOAD指令发生冒险,就将第i+3条指令往后延迟一个周期。如表2所示:

主要有两种解决方法:
(1)前一指令访存时,使后一条相关指令以及其后续指令暂停一个时钟周期。
(2)单独设置数据存储器和指令存储器,使两项操作各自在不同的存储器中进行,这属于资源重复配置。
(二)数据冒险
1. 数据冒险概念及解决方法
数据冒险也称数据相关。引起数据冒险的原因在于后面指令用到前面指令结果时前面指令结果还未产生。
主要有以下解决方法:
(1)插入空操作指令
在软件上采取措施,使相关指令延迟执行。最简单的做法是,在编译时预先插入空操作指令(NOP)。这样做的好处是硬件控制简单,但浪费了指令存储空间和指令执行时间。
(2)插入气泡
在硬件上采取措施,使相关指令延迟执行,通过硬件阻塞(stall)方式阻止后续指令执行。这种硬件阻塞的方式称为“插入气泡”。
(3)采用转发技术
设置相关专用通路,即不等前一条指令把计算结果写回寄存器组,下一条指令也不再读寄存器组,而是直接把前一条指令的ALU的计算结果作为自己的输入数据开始计算过程,使本来需要暂停的操作变得可以继续执行,称为数据旁路技术。
2. 数据冒险分类
一般情况下,在考试当中,常考的有三种数据冒险:
(1)写后写(WAW)
指令j试图在指令i写入寄存器前就写入该寄存器内容,这样,两次写的先后次序被颠倒,就会错误地使由指令i写入的值成为该寄存器的内容。
(2)读后写(WAR)
指令j试图在指令i读出寄存器前就写入该寄存器内容,这样,指令i就会错误的读出该寄存器中的新内容。
(3)写后读(RAW)
指令j试图在指令i写入寄存器前就读出该寄存器内容,这样,指令j就会错误的读出寄存器中的旧内容。
(三)控制冒险
控制冒险是由指令执行顺序遇到改变而引起的流水线阻塞被称为控制冒险。各类转移指令(包括调用、返回指令等)的执行,以及异常和中断的出现都会改变指令执行顺序,因而都可能会引发控制冒险。如下图1所示。
主要有以下解决控制冒险的方法:
1. 简单预测
简单预测与指令执行历史无关,因此它是一种静态预测方式。可以简单预测分支指令的条件总是不满足或总是满足。对于预测不满足的情况,流水线总是按顺序继续指令分支指令的后续指令,如果在数据通路中检测到实际条件确实不满足时,则预测正确,没有任何时间损失;如果检测到实际条件满足时,则预测不正确,此时将分支指令后续不该执行的指令的控制信号清0,就能保证不会改变指令执行结果,相当于执行了空操作。
2. 动态预测
动态预测的准确率可达90%,现在几乎所有处理器都采用动态预测。它利用分支指令发生转移的历史情况来进行预测,并根据实际执行情况动态调整预测位。
3. 延迟分支
延迟分支采用编译优化来调整指令顺序,把分支指令前与分支指令无关的指令调到分支指令后面执行,以填充延迟损失时间片,不够时用NOP操作填充。因为延迟分支技术通过编译器重排指令顺序来实现,所以它属于静态调度技术。
考研实用工具推荐1、2022考研院校专业匹配查询系统
2、近4年全国各在招院校专业复试分数线查询
3、历年调剂信息查询
4、历年各院校专业目录查询
5、历年各院校报录比查询
6、历年各院校参考书目录查询
免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用,不涉及商业盈利目的。如涉及版权问题,请联系本站管理员予以更改或删除。





