天任考研小编为大家整理了“24考研计算机组成原理知识梳理:影响流水线的因素”相关内容,为计算机考研的考生们提供指导。更多有关计算机考研知识点可关注考研备考栏目。
24考研计算机组成原理知识梳理:影响流水线的因素
结构冒险
也称为硬件资源冲突,引起结构冒险的原因在于同一个部件同时被不同指令所用,也就是说由硬件资源竞争造成的。
通常,机器的指令都存储在同一个存储器中,因此两条指令是不能同时访问存储器的。如下表中,LOAD指令的MEM阶段与第i+3条指令的IF阶段同时使用存储器,则此时发生结构冒险。当结构冒险发生的时候,后续指令的相应阶段必须后移。
两条指令同时访存造成结构冒险
指令时钟周期
123456789
LOAD指令IFIDEXMEMWB
指令i+1IFIDEXMEMWB
指令i+2IFIDEXMEMWB
指令i+3IFIDEXMEMWB
结构冒险的情形,通常的解决方案就是后续指令往后推迟。例如上表中的第i+3条指令因为与LOAD指令发生冒险,就将第i+3条指令往后延迟一个周期。如下表所示:
延迟方式调整结构冒险
指令时钟周期
123456789
LOAD指令IFIDEXMEMWB
指令i+1IFIDEXMEMWB
指令i+2IFIDEXMEMWB
指令i+3停顿停顿停顿IFIDEXMEMWB
主要有两种解决方法:
(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.简单预测
简单预测与指令执行历史无关,因此它是一种静态预测方式。可以简单预测分支指令的条件总是不满足或总是满足。对于预测不满足的情况,流水线总是按顺序继续分支指令的后续指令,如果在数据通路中检测到实际条件确实不满足时,则预测正确,没有任何时间损失;如果检测到实际条件满足时,则预测不正确,此时将分支指令后续不该执行的指令的控制信号清0,就能保证不会改变指令执行结果,相当于执行了空操作。
2.动态预测
动态预测的准确率可达90%,现在几乎所有处理器都采用动态预测。它利用分支指令发生转移的历史情况来进行预测,并根据实际执行情况动态调整预测位。
3.延迟分支
延迟分支采用编译优化来调整指令顺序,把分支指令前与分支指令无关的指令调到分支指令后面执行,以填充延迟损失时间片,不够时用NOP操作填充。因为延迟分支技术通过编译器重排指令顺序来实现,所以它属于静态调度技术。
四、试题再现
(2016)在无转发机制五段基本流水线(取指,译码/读寄存器,运算,访存,写回寄存器)中,下列指令序列存在数据冒险的指令对是()。
A.I1和I2B.I2和I3C.I2和I4D.I3和I4
【答案】
数据冒险指的是下一条指令会用到上一条指令的计算结果。只有I3用到了I2的输出。I3将要运算的时候I2还没有写回,因此这两个存在数据冲突。故选B。
以上是天任考研小编为大家带来的“24考研计算机组成原理知识梳理:影响流水线的因素”,希望考生们都能备考顺利,考上自己心仪的院校。想了解更多计算机考研备考相关内容请关注考研备考栏目。