指令流水线

单发射流水线以及多指令流水线(顺序执行以及乱序执行)

目录

1.单发射流水线(顺序执行)

2.多发射流水线(乱序执行)

正文
1.单发射流水线(顺序执行)

正常流水线:取指、译码、执行、访存、写回。

取值:指令存储器根据pc读取并存储指令。

译码:以mips指令为例,根据指令操作码的不同,译码器对后续模块发出控制逻辑,并且将寄存器号对应于寄存器。

执行:alu对通用寄存器或立即数进行操作。

访存:访问存储器。

写回:将结果写回通用寄存器。

流水线通过加入触发器实现了流水线功能。在下一个时钟上升沿将数据锁存到流水线下一个位置,在时钟电平稳定的时候对数据进行操作。

控制逻辑通过在每一个阶段的流水线触发器旁边增加一批用于存储控制逻辑的触发器,控制逻辑可以伴随数据沿着流水线流到下一个阶段。

指令流水线存在相关问题:数据相关、控制相关、结构相关。

数据相关包括:raw,war,waw。顺序核可引起冲突:raw相关。乱序核可引起冲突:war相关,waw相关。

Raw相关解决:1.阻塞。被阻塞流水线寄存器不变,同时给下一级流水发送无效控制信号,用bubble代替。2.前递技术:后续指令如果需要当前执行指令结果,那么将当前指令计算结果直接在执行阶段执行结束时传送作为后续指令运算的算子。

控制相关解决:转移指令后续取值错误。1.用bubble阻塞。2.可以利用转移指令的延迟槽技术。

结构相关解决:上一条指令译码阶段被阻塞,那么当前指令要在译码阶段结束后进行取值,不然会引起覆盖上一条指令的错误。

异常:可恢复异常、不可恢复异常。不可恢复异常直接终止线程。可恢复异常处理需要很精确,是精确异常。发生异常以及之后的指令都没有执行(没有改变机器状态)。

2.多发射流水线(乱序执行)(乱序核=超标量技术=多发射数据通路)

流水线:取指、译码、发射、执行、写回、提交。

超标量技术:利用多个部件在每个时钟周期进行多个操作

取指:一个周期取多条指令。

译码:如果多条指令同步译码,那么如果一条指令阻塞,其他指令陪同阻塞,影响效率,因此将译码阶段分为译码阶段以及发射阶段(保留站),被阻塞指令放在保留站内等待,取值译码可以继续执行。所有指令译码之后按顺序进入rob队列。

重命名:由于waw,war是乱序的数据相关,且问题原因是寄存器的中转问题,因此我们只需要利用中转寄存器的概念,将相关寄存器换成中转寄存器就可以消除waw,war。

发射:待执行指令放在保留站中,保留站从中选择可以执行的指令(消除了结构相关),同时记录raw相关关系,避免冲突。

执行:多个alu或者fpu同时执行。

写回:将运行结果通过结果总线。释放保留站,rob修改对应项。

提交:维护一个rob有序队列,所有指令均通过rob队列进行有序输出(解决精确异常)。所有指令译码之后按顺序进入rob队列。提交后将rob写回寄存器或者存储器。

转移预测:1.阻塞2.转移指令延迟槽3.硬件转移预测

阻塞效率低,转移指令延迟槽限制比较大,不适用于取指分级流水线以及多发射数据通路设计,因此多用硬件转移预测技术。一种比较简单的转移预测技术基于for,while等是连续的tt/ff最后是ff/tt,因此循环中大多数情况是否转移与上次指令是否转移一样。记录转移指令执行历史的表叫转移历史表(BHT/PHT)。

你可能感兴趣的:(指令流水线)