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