11-指令流水
三、指令周期
一、如何提高机器速度
- 提高访存速度
高速芯片 Cache 多体并行 - 提高I/O和主机之间的传送速度
中断 DMA 通道 I/O处理机 多总线 - 提高运算速度
高速芯片 改进算法 快速进位链 - 提高整机处理能力
高速器件 改进系统结构,开发系统的并行性
二、系统的并行性
- 并行的概念
并行:- 并发:两个或两个以上时间再同一时间段发生
- 同时:两个或两个以上时间再同一时刻发生
- 并行性的等级
过程级(程序、进程) 粗粒度 软件实现
指令集(指令之间、指令内部)细粒度 硬件实现
三、指令流水原理
-
指令的串行执行
取指令 取指令部件 完成
执行指令 执行指令部件 完成如果采用执行的串行执行,则取指令阶段 执行指令部件空闲;执行指令阶段取指令部件空闲
-
指令的二级流水
第一条指令在执行指令的时候,第二条指令开始取指令操作
若取指和执行阶段时间上完全重叠,指令周期减半 速度提高1倍 -
影响指令流水效率加倍的因素
1) 执行时间>取指时间 可以在取指令部件和执行指令部件中间加一个指令部件缓冲区,如果指令指令部件还没有让出,就先将指令放在指令部件缓冲区中
2) 条件转移指令 对指令流水的影响:必须等上条指令执行结束,才能确定下条指令的地址 造成时间损失 可以进行指令预测 -
指令的六级流水
四、影响指令流水线性能的因素
-
结构相关 不同指令争用同一功能部件产生资源冲突
解决办法:- 停顿
- 指令存储器和数据存储器分开
- 指令预取技术(适用于访存周期短的情况)
-
数据相关 不同指令因重叠操作,可能改变操作数的 读/写 访问顺序
写后读相关(RAW)
读后写相关(WAR)
写后写相关(WAW)
解决办法:- 后推法:推后读,在上一条指令结束后,再执行下一条指令
- 采用旁路技术 在上一条指令运算器有结果输出后,直接给到下一个运算器的输入端来节省时间
-
控制相关 由转移指令引发 转移指令只有在上一条指令结束后,才知道下一条指令是哪一条,就造成了时间的浪费
-
流水线性能
1)吞吐率 单位时间内流水线所完成指令或输出结果的数量 设m段的流水线各段时间为△t- 最大吞吐率$T_pmax=1/△t$
- 实际吞吐率 连续处理n条指令的吞吐率为$T_p=n/(m*△t+(n-1)△t)$
2)加速比 m段的流水线速度与等功能的非流水线速度之比 设m段的流水线各段时间为△t - 完成n调指令在m段流水线上共需$T=m△t+(n-1)△t$
- 完成n调指令在等效的非流水线上共需$T'=nm△t$
加速比 $S_p=nm/(m+n-1)$
3)效率 流水线中各功能段的利用率
由于流水线有建立时间和排空时间 因此各功能段的设备不可能一直处于工作状态
效率=流水线各段处于工作时间的时空区/流水线中各段总的时空区=mn△t/m(m+n-1)△t
五、流水线的多发技术
- 超标量技术
- 每个时钟周期内可并发多条独立指令
配置多个功能部件 - 不能调整指令的执行顺序
通过编译优化技术,把可并行执行的指令搭配起来
- 每个时钟周期内可并发多条独立指令
- 超流水线技术(使用广泛)
- 在一个时钟周期内再分段(3段)
在一个时钟周期内一个功能部件使用多次(3次) - 不能调整指令的执行顺序
靠编译程序解决优化问题
流水线速度最大可达到原来的3倍
- 在一个时钟周期内再分段(3段)
- 超长指令字技术
- 由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条,具有多个操作码字段的超长指令字(可达几百位)
- 采用多个处理部件
六、流水线结构
- 指令流水线结构
完成一条指令分6段,每段需一个时钟周期(不同cpu不一样)
取指令部件->指令译码部件->地址形成部件->取操作数部件->操作执行部件->回写结果部件
若流水线不出现断流 1个时钟周期出1个结果
不采用流水线技术 6个始终周期出一个结果
理想情况下,6级流水的速度是不采用流水技术的6倍
每个部件都需要锁存 - 运算流水线
完成浮点加减运算 可分 对阶、尾数求和、规格化三段
每一段后面都要加锁存器
分段原则 每段操作时间尽量一直