



能够改变控制流的指令:分支、跳转、过程调用、过程返回







改进后




存储器访问

寄存器-寄存器 ALU

寄存器-立即值 ALU

分支

Load/Store

分支


单位时间流水线完成的任务数或输出的结果数

实际吞吐率




某些指令组合在流水线中重叠执行时,产生资源冲突

解决方案:指令和数据分离;添加“气泡”

指令在流水线中重叠执行时,流水线可能改变指令读/写的顺序,使得读/写的操作顺序不同于非流水线的实现顺序



插入暂停周期

编译器重新组织代码顺序消除暂停
分支指令带来的暂停

减少流水线处理分支指令时的暂停时钟周期数有如下两种途径:
延迟分支


展开循环体若干次,将循环级并行性转化为指令级并行
数据相关
名相关
名:指令使用的寄存器或存储器
名相关:两条指令使用相同的名,但之间并没有数据流
换名技术
控制相关
分支指令引起
为了允许乱序执行,将基本流水线的译码阶段再分为以下两个阶段
所有的指令在流出(IS)阶段是顺序的,但是在第二阶段读操作数(RO)时,只要指令运行所需的资源满足并且没有数据阻塞,就应该允许指令乱序执行。
指令的执行过程
记分牌需要记录的信息


允许在指令由于存在相关而导致阻塞的情况继续执行,结合记分牌的关键和寄存器换名技术。寄存器换名通过保留站实现,保存等待流出和正在流出指令所需的操作数
与记分牌的差别
指令的执行过程
最简单的动态分支预测技术叫做分支预测缓冲技术(Branch Prediction Buffer或者Branch History Table,BTB或者BHT),它仅仅使用一片存储区域,记录最近一次或几次分支特征的历史。包括分支预测和预测位修改两个步骤。
分支目标缓冲区(BTB)


允许在处理器判断指令是否能够执行之前就提前执行,以克服控制相关
关键思想:允许乱序执行,但必须顺序确认
再定序缓存(ROB):保存执行完毕但未经确认的指令及其结果,在前瞻执行的指令之间传递结果
指令的执行过程
每个时钟周期流出的指令数目不定
将多条指令的操作组装为固定格式的指令包,形成一条非常长的指令