CPU指令流水线
指令执行过程分为多个阶段,每个阶段需要的资源不一样,因此可以采用流水线技术,同时执行多条指令的不同阶段。
指令周期概念:https://blog.csdn.net/u014106644/article/details/95199989
1.指令流水原理
可以将指令周期简单分为取指令和执行指令
取指令由取指部件完成,执行指令由执行部件完成,如果采用串行化执行,则在执行指令1时,取指部件是空闲的。
指令的二级流水
在执行指令1阶段,同时将指令2取出放入指令缓存部件,等执行部件执行指令1结束,则直接执行指令2,理想情况,流水线的效率将加倍。
仍存在的问题:
指令执行时间一般大于取值时间,因此取值阶段要等待一段时间,存放在缓冲区的指令不能立即交给执行部件;
当遇到条件转移指令时,下一条指令是不可知的;采用猜测法,遇到条件转移指令时,也将下一条指令取出送入指令缓冲区,如果转移没有发生则继续执行,如果转移发生,则重新取指令。
将指令处理过程进一步细分:
取指FI 从存储器取出一条指令放入指令部件缓冲区
指令译码DI 确定操作性质和操作数地址形成方式
计算操作数地址CO 计算操作有效地址
取操作数FO 从存储器中取出操作数
执行指令EI 执行指令,将结果存入目的位置
写操作书WO 将结果存入寄存器
将指令周期分为6个阶段,可以实现指令的6级流水
2.影响流水线性能因素
2.1结构相关 资源相关
不同指令争用同一部件产生资源冲突
FO取指和FI取操作数会发生访存冲突
解决方式:
流水线完成前一条指令对数据的存储器访问时,暂停取后一条指令
设置独立存储器存放操作数和指令
采用指令预取技术,将指令预取到指令队列中,这样取操作数操作便可以独占存储器访问
2.2数据相关
不同指令重叠操作,可能改变对操作数的读写访问顺序
数据相关冲突有:
写后读相关:先写入寄存器,再读出寄存器
读后写相关:先读寄存器,再写寄存器
写后写相关:指令1先写寄存器,指令2再写寄存器
解决方式:
后推法 遇到数据相关时,停顿后继指令运行,直到前面指令结果已经生成
定向技术 旁路技术 将某条指令执行结果不送回寄存器而是直接送到其他指令所需的地方
2.3控制相关
由转移指令引起 若是条件转移指令,则转移目标地址可能发生跳转,影响流水线效率。
解决方式:
尽早判别转移是否发生,尽早生成转移目标地址
预取转移成功和不成功两个方向的目标指令
加快和提前形成条件码
3.流水线性能
3.1吞吐率
单位时间内流水线完成指令或输出结果数量
最大吞吐率:流水线在连续流动达到稳定状态后所得吞吐率
m段流水线各段时间均为t
实际吞吐率:流水线完成n条指令实际吞吐率
3.2加速比
m段流水线速度与等功能非流水线速度之比
3.3效率
流水线中各功能段利用率
流水线效率为流水线各段处于工作时间时空区和流水线中各段总时空区之比,如图
4.流水线多发技术
假定指令周期分为四个阶段:取指FI 译码ID 执行EX 回写WR
4.1超标量技术
在每个时钟周期内同时并发多条独立指令
处理机中配置多个功能部件和指令译码电路,多个寄存器端口和总线;编译程序决定哪几条相邻指令可并行执行
例如 三条指令是相互独立的,可以并行执行
MOV BL,8
ADD AX,1756H
ADD CL,4EH
4.2超流水线技术
在一个时钟周期内再分段,一个功能部件使用多次
4.3超长指令字技术
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字
5.流水线结构
5.1指令流水线结构
将指令执行阶段分为取指 指令译码 地址形成 取操作数 执行指令 回写结果几个阶段,对应相应结构如下
5.2运算流水线结构
将浮点加法运算分成对阶 尾数加 结果规格化 3个阶段
参考资料:计算机组成原理--哈工大--刘宏伟