流水线
书中叫标量处理机,下章叫向量处理机,主要区分在于处理的是一个数据还是一组数据。
重叠方式
顺序执行
指令执行过程:取指令、 分析 、执行。依次进行。
一次重叠
三个动作中有一个动作是重叠的,称一次重叠。程序的执行时间减少了近1/3
二次重叠
执行时间缩短了2/3.部件利用率有了进一步提高。
二次重叠方式其实就是流水线。
流水线
流水线基本概念(时间重叠)
时空图来描述流水线
横坐标,时间,计算机的周期
纵坐标,空间,物理上一共有几级流水线
时空图另一种表示
横坐标,还是时间
纵坐标,指的是指令
中间内容,表示这条指令处于的流水线的级别
MIPS五级流水线
取指、译码、执行、存储器访问、写回
流水线特点
- 功能部件 - 锁存器
- 独立工作的各子功能部件
- 各部件处理时间尽可能相等,争取最大工作频率
- 解决同步问题,保证以相同的速度处理
- 解决访存冲突,允许不同指令同时读,同时写。
流水线分类
按处理级别
分为操作流水线,指令流水线,宏流水线
指令流水线
处理的是指令,从取指到结果
操作级流水线
对指令操作,再进一步细分
宏流水线
通过不同机器完成细分的任务(不是指令了)。
按功能多少
单功能,只完成固定功能
多功能:配置下,可完成不同功能。
多功能,按同一时间内各段之间的连接方式
静态流水线:同一时间内,多功能只能按一种功能方式工作
动态流水线:同一时间内,可以处理多种功能。
流水线结构
线性流水线:不带反馈回路的流水线
非线性流水线:带反馈回路流水线。
控制方式
同步流水线:有共同的时钟,大部分流水线都是同步的。
异步流水线:如宏流水线
其他方式
按处理的数据类型
标量流水线和向量流水线
按任务从输出端的流出顺序
顺序流水线:指令流出顺序=指令流入顺序
乱序流水线:指令流出指令!=指令流入顺序
性能分析
吞吐率
单位时间内流水线完成的任务数或输出结果数量
加速比
完成一批任务,不用流水线比使用流水线执行时间之比
加速比不是越大越好,硬件上有锁存的保持等,需要付出一定的代价。
效率
流水线的设备利用率。
提高流水线效率方法
细分瓶颈段
重复设置重复段
流水线相关Hazard(冲突)
什么是相关?
由于相关的存在,使得指令流中的下一条指令不能在指定的时钟周期执行。
相关几种类型?
- 结构Hazard:由于资源冲突,造成的相关。典型的就是存储不足
- 数据Hazard:需要等前面指令执行完,才能执行下一个。
- 控制Hazard:分支判断,才能执行
带来问题
导致 错误的执行结果
流水线可能出现停顿,从而降低流水线的效率和实际的加速比
约定
当一条指令被暂停时,在该指令的后面所有相关指令都要被暂停。
结构Hazard解决办法
- 设置相互独立的指令存储器和数据存储器。
- 插入暂停周期(流水线气泡)
数据Hazard
两条指令的关系
写后读(容易产生相关)、写后写、读后写、读后读
解决办法
定向技术(旁路技术bypass技术):加上一个多路选择器,数据不再从寄存器中来,而是从产生的地方直接送到其他指令需要它的地方。
控制Hazard
分支成功:PC值改变为分支转移的目标地址,在条件判定和转移地址计算完成后,才改变PC
分支失败:pc值保持正常递增
解决
最简单办法:冻结(等待)或排空
- 尽早判断并分支,可以先猜一个(50%正确率),只要不往下执行就可以
- 延迟槽技术,猜的内容就放到延迟槽里,可以从前调度(从判断前,取指令放到延迟槽,这样保证100%要执行),也可以目标处调度(如循环,返回地址处),也可从失败处调度(从判断else处PC,放到延迟槽)
指令级高度并行的超级处理机
一个周期执行多条指令
ILP,指令级并行
利用流水线来使指令重叠执行,以达到提高性能的目的。这种指令之间存在的潜在并行性称为指令级并行。可以硬件也可软件实现
超标量处理机 SuperScalar
有多条流水线,完全由硬件来实现,如下图:
超长指令字VLIW
多条指令拼成一条指令,靠编译器来实现。
超级流水线
更细的流水线划分,这样每个时钟周期能够 分时流出多条指令