将一个重复的过程分解成若干子过程,每个子过程与其他子过程并行执行
。由于流水线技术只需增加少量硬件就能把计算机运行速度提高几倍,故而广泛用于并行处理。
1、定义
将一条指令的执行过程分成取指、分析和运行
三个步骤,这三个步骤依次进行,不能乱了次序。当同时有多条指令在 CPU 执行,可以采用如下策略进行安排:
1)顺序执行
又称为串行执行
,按指令的先后顺序执行,即执行完一条指令才启动下一条指令
,若取指、分析和执行三个子过程的时间消耗一样,则整个指令的耗时单个子过程的三倍,n 条指令顺序执行所需时间是单个子过程的 3n 倍,即设取指耗时 t,n 条指令顺序执行耗时为 T,则:控制简单、硬件代价小
;缺点是执行指令速度慢
,一个时刻只能有一条指令执行,资源利用率低。
2)一次重叠执行方式
将当前指令的执行阶段和下一条指令的取指阶段同时进行
,在时间轴上存在了一次重叠,此种方式下 n 条指令的执行耗时为:时间缩短了三分之一
,提高功能部件利用率;但是硬件代价较大
,控制过程
也相对复杂
。
3)二次重叠执行方式
将当前指令的分析阶段和下一条指令的取指阶段同时执行,并且当前指令的执行阶段和下一条指令的分析阶段同时执行
,在时间轴上存在两次重叠,此时执行 n 条指令耗时:缩短2/3的时间
,是一种理想的指令执行方式,正常情况下,处理机中同时有 3 条指令在执行。
进一步的,若指令分解不止三个步骤,是四个或五个,则可以有三次、四次重叠,总而言之,两条指令的执行阶段不要重叠,执行阶段可以和其他非执行阶段重叠
。时空图来直观地描述流水线地工作过程
:输入流水线中各个任务在流水线中所经过地时间
,横坐标分割成相等长度地时间段;纵坐标表示空间,即流水线的每个流水段
。
3、流水线方式的特点
采用流水线执行指令有如下几个特点:将一个任务划分成若干有联系的子任务,每个任务由专门的功能部件执行,并依靠多个功能部件并行工作从而缩短程序执行时间
。功能段部件后面
都要有一个缓冲寄存器
,或称锁存器
,作用是保存本流水段的执行结果
,供给下一流水段使用。各功能段的时间尽量相等
,否则将引起堵塞、断流。连续不断地提供同一种任务时才能发挥流水线的效率
,所以在流水线中处理的必须是连续任务。在采用流水线方式工作的处理机中,要在软件和硬件设计等多方面尽量为流水线提供连续的任务。装入时间和排空时间
。装入时间时指第一个任务进入流水线到输出流水线的时间。排空时间是指最后一个任务进入流水线到输出流水线的时间。
二、流水线分类
1、按流水线使用级别分类
根据流水线使用级别分类,可分为部件功能级流水线、处理机级流水线和处理机间流水线
。将复杂的算术逻辑运算组成流水线工作方式
,例如将浮点加法操作分成求阶差、对阶、尾数相加及结果规格化等四个子过程。把一条指令解释过程分为多个子过程
。一种宏流水,其中每个处理机完成某一专门任务,各个处理机得到的结果存放在与下一个处理机共享的存储器中
。
2、按完成的功能分类
按照可以完成的功能分类,可分为单功能流水线和多功能流水线
;前者是指只能实现一种固定的专门功能
的流水线;后者是指通过各阶段间的不同连接方式可以同时或不同时地完成多种功能
的流水线。
3、按连接方式分类
按照同一时间内各段之间的连接方式分为静态流水线和动态流水线
;前者指同一时间内
,流水线的各段
只能按同一种功能
的连接方式工作;后者指同一时间内
,流水线的各段
可以进行不同的运算
,这样可以提高流水线的效率,但是使流水线控制变得复杂。
4、根据有无反馈信号分类
按流水线的各个功能段之间是否有反馈信号
,分为线性流水线和非线性流水线
;前者,从输入到输出,每个功能段只允许经过一次
,不存在反馈回路;后者存在反馈回路,从输入到输出,某些功能段将数次通过流水线
,这种流水线适合进行线性递归运算。
流水线的每个子过程由专门的功能段实现,各功能段所需的时间应尽量相等
;否则,时间长的功能段将成为流水线的瓶颈。
三、影响流水线性能的因素
主要有资源冲突和相关问题
。
1、资源冲突
由于多条指令在同一时刻争用同一资源而形成的冲突称为资源冲突
,解决方法如下:前一指令访存时,使后一条相关指令以及其后续指令暂停一个时钟周期
。单独设置数据存储器和指令存储器,使两项操作在不同存储器中进行
。
2、相关问题
流水线的相关问题主要指相邻指令间存在某种关联
,使指令流水线出现停顿,降低了流水线的效率,主要是数据相关和控制相关两类
。
2.1、数据冲突
也叫数据冒险
。在一个程序中,下一条指令会用到当前指令的计算结果,此时这两条指令即为数据冒险
。当多条指令重叠处理时就会发生冲突,解决方法:
1)把遇到数据相关的指令及其后续指令暂停一至几个时钟周期
,直到数据相关问题消失后再继续执行,分为硬件阻塞(stall)和软件插入“NOP”指令
两种方法。
2)设置相关专用通路
,即不等前一条指令把计算结果写回寄存器,下一条指令也不再读寄存器组,而直接把前一条指令
的 ALU 计算结果
作为自己的输入数据
开始计算过程,使本来需要暂停的操作变得可以继续执行,这称为数据旁路技术
。
3)通过编译器
对数据相关的指令编译优化
的方法,调整指令顺序来解决数据相关。
2.2、控制冲突
也叫控制冒险
。一条指令要确定下一条指令的位置
,如执行转移、调用或返回等指令时会改变 PC 值,而造成断流,引起控制冒险。解决方法:
1)对转移指令进行分支预测
,尽早生成转移目标地址
。分支预测分为简单(静态)预测和动态预测
;静态预测总是预测条件不满足,即继续执行分支指令的后续指令;动态预测根据程序执行的历史情况,进行动态预测调整,有较高的预测准确率。
2)预取转移成功和不成功两个控制流方向上的目标指令。
3)加快前提形成条件码
。
4)提高转移方向
的猜准率
。
另外,Cache 缺失的处理过程也会引起流水线阻塞;在不过多增加硬件成本的情况下,如何尽可能地提高指令流水线地运行效率是选用指令流水线技术必须解决地关键问题。
四、流水线的性能指标
衡量流水线性能的主要指标有:吞吐率、加速比和效率
。
1、吞吐率
指在单位时间内流水线完成的任务数量
,或输出结果的数量,其计算公式如下:每个时钟周期内可并发多条独立指令
,即以并行操作方式将两条或多条指令编译并执行,需要配置多个功能部件。超标量计算机不能调整指令的执行顺序,因此通过编译优化技术
,把可并行执行的指令搭配起来,挖掘更多的指令并行性,如下:一个时钟周期内再分段,在一个时钟周期内一个功能部件使用多次
。编译程序解决优化问题
。编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组成一条具有多个操作码字段的超长指令字
,可达几百位,为此需要多个处理部件。
上一篇