1.机器周期的设置
2.影响流水线的因素
2.1 结构相关(资源冲突,互斥)
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
这里的ID阶段和WB阶段的寄存器冲突,即取指令的寄存器和存储数据的寄存器为同一个,所以冲突了
解决办法:
1.后一相关指令暂停一周期
2.资源重复配置:数据存储器+指令存储器(即设置两个不同的寄存器)
2.2 数据相关(数据冲突,数据冒险,同步)
数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。
解决办法:
1.把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件
阻塞(stall)和软件
插入“NOP”两种方法。
2.数据旁路技术。
设置相关专用通路,即不等前一条指令把计算结果写回寄存器组,下一条指令也不再寄存器组(而直接把前一条指令的ALU的计算结果作为自己的输入数据开始计算过程使本来需要暂停的操作变得可以继续执行,这称为数据旁路技术。
3.编译优化:通过编译器调整指令顺序来解决数据相关。
2.3 控制相关(控制冲突)
当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。
解决办法:
1.转移指令分支预测。简单预测(永远猜ture或false)、动态预测(根据历史情况动态调整)
2.预取转移成功和不成功两个控制流方向上的目标指令(把正确和错误的指令都取出,做两手准备)
3.加快和提前形成条件码
4.提高转移方向的猜准率(即对第一种方法的优化)
3.流水线的分类(了解即可)
3.1部件功能级、处理机级和处理机间级流水线
根据流水线使用的级别的不同,流水线可分为部件功能级流水线、处理机级流水线和处理机间流水线。
部件功能级流水
就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。
处理机级流水
是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5个子过程。
处理机间流水
是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
3.2单功能流水线和多功能流水线
按流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。
单功能流水线
指只能实现一种固定的专门功能的流水线;
多功能流水线
指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
3.3动态流水线和静态流水线
按同一时间内各段之间的连接方式,流水线可分为静态流水线和动态流水线。
静态流水线
指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
动态流水线
指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
3.4线性流水线和非线性流水线
按流水线的各个功能段之间是否有反馈信号,流水线可分为线性流水线与非线性流水线。
线性流水线
中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
非线性流水线
存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算。
4.流水线的多发技术
4.1超标量技术
每个时钟周期内可并发多条独立指令,要配置多个功能部件
不能调整指令的执行顺序,对于123和456之间
通过编译优化技术,把可并行执行的指令搭配起来,对于123内部或456内部
4.2超流水技术
在一个时钟周期内再分段(3段)
在一个时钟周期内一个功能部件使用多次(3次)
不能调整指令的执行顺序
靠编译程序解决优化问题
4.3超长指令字
由编译程序挖掘出指令间潜在的并行性,
将多条能并行操作的指令组合成一条
具有多个操作码字段的超长指令字(可达几百位)
采用多个处理部件