流水线技术
访问主存的冲突解决
- 设置两个独立编址的存储器
- 指令和数据依然混合放在同一个主存,但设置两个Cache:指令Cache和数据Cache。程序空间和指令空间相互独立的系统结构称为哈佛结构。
- 指令和数据依然混合放在统一主存,但主存采用多体交叉结构。(有一定的局限性)
- 在主存和指令分析部件之间增设指令缓冲站
先行指令缓冲站
先行程序计数器PC1 |
先行程序计数器PC |
指令缓冲 存储区 |
主
存 指令分析部件
指令寄存器IR |
控
制
控制逻辑 |
器
- 指令缓冲存储区&控制逻辑
a) 按队列方式工作
b) 只要指令缓冲站不满,他就自动地向主存控制发取指令请求,不断地取指令
- 指令分析部件
a) 每分析完一条指令,就自动向指令缓冲站发出取下一条指令的请求。指令取出之后就把指令缓冲站中的指令作废。
b) 指令缓冲器中存放的指令条数是动态变化的
- 两个程序计数器
a) 先行程序计数器PC1:用于从主存预取指令
b) 现行程序计数器PC:用来记录指令分析部件当前正在分析的指令的地址
先行控制
- 先行控制技术:缓冲技术和预处理技术的结合
a) 缓冲技术:在工作速度不固定的两个功能部件之间设置缓冲器,用以平滑它们的工作。
b) 预处理技术:预取指令、对指令进行加工以及预取操作数等。
- 采用先行控制方式的处理机结构
主存储器 |
存储控制器 |
先行指令缓冲站 |
先行读数站 |
指令分析部件 |
先行操作站 |
运算控制器 |
通用寄存器 |
后行写数站 |
运算器 |
流水线技术特点
- 流水线把一个处理过程分解为若干个子过程(段),每个子过程由一个专门的功能部件来实现。
- 流水线中各段的时间尽可能相等,否则将引起流水线阻塞、断流,时间长的段将成为流水线的瓶颈
- 流水线每一个功能部件的后面都要有一个缓冲寄存器(锁存器),称为流水寄存器
- 流水技术适合于大量重复时序过程,只有在输入端不断地提供任务才能充分发挥出流水线的效率
- 流水线需要有通过时间和排空时间
a) 通过事件:第一个任务从进入流水线到流出结果所需的时间
b) 排空事件:最后一个任务从进入流水线到流出结果所需的时间
流水线的分类
- 单功能流水线&多功能流水线
a) 单功能流水线:只能完成一种固定功能的流水线
b) 多功能流水线:流水线的各段可以进行不同的连接以实现不同的功能
- 静态流水线&动态流水线
a) 静态流水线:在同一时间内,多功能流水线中的各段只能按同一钟功能的连接方式工作
b) 动态流水线:同一时间内多功能流水线中各段可以按照不同的方式连接,同时执行多种功能
- i. 优点:灵活,能提高流水线各段的使用率,从而提高处理速度
- ii. 缺点:控制复杂
- 部件级、处理机级及处理机间流水线(按照流水的级别来进行分类)
a) 部件级流水线(运算操作流水线):把处理机的算数逻辑运算部件分段,使得各种类型的运算操作能够按流水方式进行
b) 处理机级流水线(指令流水线):把指令的解释执行过程按照流水方式处理。把一条指令的执行过程分解为若干个子过程,每个字过程在独立的功能部件中执行
c) 处理机间流水线(宏流水线):它是由两个或者两个以上的处理机穿行连接起来,对同一数据流进行处理,每个处理机完成整个任务中的一部分
- 线性流水线与非线性流水线
a) 线性流水线:流水线的各段串行连接,没有反馈回路。数据通过流水线中的各段时,每一段最多只流过一次
b) 非线性流水线:流水线中除了有串行的连接外,还有反馈回路
c) 非线性流水线的调度问题:确定什么时候向流水线引进新的任务,才能使该任务不会与先前进入流水线的任务发生冲突——争用流水线
- 顺序流水线与乱序流水线
a) 顺序流水线:流水线输出端任务流出的顺序与输出端流入的顺序完全相同。每一个任务在流水线的各段中是一个跟着一个顺序流动的。
b) 乱序流水线:流水线输出端任务流出的顺序与输入端流入的顺序可以不同,允许后进入流水线的任务先完成(从输出端流出)
也称无序流水线、错序流水线、异步流水线
- 标量处理及与向量流水处理机
a) 流水线处理机:指令部件中采用了流水线的处理机
b) 标量处理机:处理机不具有向量数据表示和向量指令,仅对于标量数据进行流水处理。
c) 向量流水处理机:具有向量数据表示和向量指令流水的处理机
- 流水线的性能指标
a) 吞吐率:在单位时间内流水线所完成任务的数量或输出结果的数量
n:任务数
:处理完n个任务所用的时间
- 解决流水线瓶颈的常用方法
a) 细分瓶颈段(串联)
b) 重复设置瓶颈段(并联)
- 加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比
各段时间相等
- 效率:流水线中的设备实际使用时间与整个运行时间的比值,即流水线设备的利用率。(从图形来看就是实际占地/总矩形占地面积)
= 各段时间相等
相关与流水线冲突
- 相关:两条指令之间存在某种依赖关系
a) 数据相关:对于两条指令i,j(i在j前),如下述条件之一成立,则称指令j与指令i数据相关。
- i. 指令j使用指令i产生的结果
- ii. 指令j与指令k数据相关,而指令k又与指令i数据相关(传递性)
b) 名相关:名:指令所访问的寄存器或存储器单元的名称。若两条指令使用相同的名,但它们之间并没有数据流动,则称这两条指令存在名相关
- i. 反相关:如果指令j写的名与指令i读的名相同,则称指令i和j发生了反相关
指令j写的名=指令i读的名
- ii. 输出相关:如果指令j和指令i写相同的名,则称指令i和j发生了输出相关
指令j写的名=指令i写的名
换名技术:通过改变指令中操作数的名来消除名相关
c) 控制相关:是由分支指令引起的相关。为保证程序应有的执行顺序,必须严格控制相关确定的执行顺序,控制相关带来的两个限制:
- i. 与一条分支指令控制相关的指令不能被移到该分支之前,否则这些指令就不受该分支控制了
- ii. 如果一条指令与某分支指令不存在控制相关,就不能把该指令移到该分支后
- 流水线冲突:是指对于具体的流水线来说,由于相关的存在,使得指令流中的下一条指令不能在指定的时钟周期执行
a) 结构冲突:因硬件资源满足不了指令重叠执行的要求而发生的冲突
- i. 在流水线处理机中,为了能够使各种组合的指令都能顺利地重叠执行,需要对功能部件进行流水或重复设置资源
- ii. 如果某种指令组合因为资源冲突而不能正常执行,则称该处理机有结构冲突
-
iii.
常见导致结构相关的原因
- 功能部件不是完全流水
- 资源份数不够
-
iv.
解决方法:
- 插入暂停周期
- 设置相互独立的指令存储器和数据存储器或设置相互独立的指令Cache和数据Cache
b) 数据冲突:当指令在流水线中重叠执行时,因需要用到前面指令的执行结果而产生的冲突
考虑两条指令i和j,且i在j之前进入流水线
- i. 写后读冲突RAW:在i写入之前,j先去读
- ii. 写后写冲突WAW:在i写入之前,j先写
- iii. 读后写冲突WAR:在i读出之前,j先写
冲突发生的情况:
- 有些指令的写操作被提前了,而且有些指令的读操作滞后了
- 指令被重新排序了
读后写冲突在五段流水线中不会发生
应对方案
- 通过定向技术(数据旁路)减少数据冲突引起的停顿:在某条指令产生计算结果之前,其他指令并不真正离机需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令需要它的地方,那么可以避免停顿。
- 增加流水互锁硬件,插入暂停
c) 控制冲突:流水线遇到分支指令和其他会改变PC值的指令所引起的冲突
- i. 处理方法:冻结或排空流水线(优点:简单)
-
ii.
减少分支延迟方法:
- 在流水线中尽早判断出分支转移是否成功
- 尽早计算出分支目标地址
若确定分支成功,流水线九八在分支指令之后取出的所有指令转化为空操作,并按分支目的地重新取指令执行。要保证:分支结果出来之前不会改变处理机的状态,以便一旦答错时,处理机能够回退到原先的状态。
分支延迟指令的调度
任务:在延迟槽中如有用的指令。由编译器完成,能否带来好处取决于编译器能否将有用的指令调度到延迟槽中。
三种调度方法:
a) 从前调度:被调度的指令必须与分支无关(任何情况)
b) 从目标处调度:必须保证在分支失败时执行被调度的指令不会导致错误,有可能需要复制指令。(分支成功时)
c) 从失败处调度:必须保证在分支成功时窒息感被调度的指令不会导致错误(分支失败时)
数据冲突带来的问题:
- 导致错误的执行结果
- 流水线可能出现停顿,从而降低流水线的效率和实际的加速比
- 约定:当一条指令被暂停时,在该暂停指令之后流出的所有指令都要被暂停,而在该暂停指令之前流出的指令则继续进行(否则就永远无法消除冲突)
流水线的实现
- 一条MIPS指令五个周期
a) 取指周期IF
b) 指令译码/读寄存器周期ID
c) 执行/有效地址计算周期EX
d) 存储器访问/分支完成周期MEM
e) 写回周期WB
- 不使用单周期实现方案的主要原因
a) 对于大多数CPU,单周期实现效率很低,因为不同指令所完成的操作差别相当大,因而所需的时钟周期也不太一样
b) 单周期实现时,需重复设置某些功能部件,而在多周期实现方案中,这些部件可以共享
- 流水线实现数据通路:设置流水寄存器
- 流水线的控制:主要是如何控制四个多路选择器,第五个多路寄存器从MEM/WB回传至通用寄存器组的写入地址应该是从MEM/WB.IR[rd]&MEM/WB.IR[rt]
- 解决数据冲突的问题
a) 所有数据冲突均可在ID段检测到,如果存在数据冲突就在相应的指令流出ID段之前将之暂停。完成该工作的硬件成为流水线的互锁机制
b) 在ID段要确定需要什么样的定向,并设置相应的控制
定向逻辑:考虑多种情况,通过比较流水寄存器中的寄存器地址来确定
c) 在使用操作数的那个时钟周期的开始检测冲突和确定必需的定向
d) 检测冲突是通过比较寄存器地址是否相等来实现的
- 控制冲突
a) 分支指令的条件测试和分支目标地址在计算机EX段完成,对PC的修改在MEM段完成。
b) 它所带来的分支延迟是三个时钟周期
c) 减少分支延迟:做如下改进
- i. 在ID段增设一个加法器,用于计算分支目标地址
- ii. 把条件测试的逻辑电路移至ID段
- iii. 这些结果直接回送到IF段的MUX1
- iv. 改进后的流水线谁分支指令的处理
向量处理机
- 向量处理机&标量处理机
a) 向量处理机:在流水处理机中设置向量数据表示和相应的向量指令
b) 标量处理机:不具有向量数据表示和相应的向量指令的流水线处理机
- 等间距向量表示法:
a) 向量起始地址:A
b) 向量长度:L
c) 向量间距:f
- 带位移量的向量表示法
a) 向量基地址:A
b) 向量长度:L
c) 向量位移量:f
d) 向量有效长度:L-f
e) 向量起始地址:A+f
稀疏向量表示法:设置压缩位向量- 向量处理机结构
a) 存储器-存储器结构:
- i. 多个独立的存储器模块并行工作
- ii. 处理机结构简单
- iii. 对存储系统的访问速度要求很高
b) 寄存器-寄存器结构:
- i. 运算通过向量寄存器进行
- ii. 需要大量高速寄存器
- iii. 对存储系统访问速度的要求降低
- 向量处理方式
eg:D = A * ( B + C )
a) 水平处理方式
- i. 向量计算按行的方式从左到右横向进行
先计算: d1←a1×(b1+c1)
再计算: d2←a2×(b2+c2)
……
最后计算: dN←aN×(bN+cN)
- ii. 组成循环程序进行处理(数据相关n次,功能切换2n次)
ki←bi+ci
di←ki×ai
- iii. 不适合于向量处理机的并行处理
b) 垂直处理方式
- i. 向量计算是按照列的方式从上到下纵向进行
k1←b1+c1 d1←k1×a1
先计算 …… 再计算
kN←bN+cN dN←kN×aN
c) 分组(纵横)处理方式
- i. 把向量分成若干组,组内垂直方式处理,依次处理各组
- ii. 对处理机结构的要求:寄存器—寄存器结构
- 向量处理机性能评价
a) 向量指令的处理时间
:流水线建立时间
:流水线的流过时间
:流水线瓶颈段的执行时间
若不存在瓶颈,每段执行时间等于一个时钟周期则:
s:向量流水线的建立时间所对应的时钟周期数
e:向量流水线的流过时间所对应的时钟周期数
:时钟周期时间
也可
:向量功能部件启动所需的时间周期数
b) 决定向量指令执行时间的因素:
- i. 向量长度
- ii. 向量操作之间是否链接
- iii. 向量功能部件的冲突和数据的冲突性
c) 把几条能在同一时钟周期内一起开始执行的向量指令集合称为一个编队
d) 一个编队内所有指令执行完毕所需要的时间为
e) 编队后向量指令序列总的执行时间
来源:https://www.cnblogs.com/yuelien/p/12315556.html