CA-第十三讲

Reservation Station 结构
Op
: 部件所进行的操作Vj
, Vk
: 源操作数的值。Store 缓冲区有Vk域,用于存放要写入存储器的 值。V域和Q域不同时有效。A
:存放存储器地址。开始存立即数,计算出有效地址后,存放有效地址Qj
, Qk
: 产生源操作数的保留站号
✓ 没有记分牌中的准备就绪标志, Qj, Qk=0 => ready
✓ Store 缓存区只有Qk表示产生结果的保留站号Busy
: 标识保留站RS或相应的功能部件FU是否空闲
Register result status—如果存在对寄存器的写操作,指示对该寄存器 进行写操作的部件. Qi
: 保留站的编号
Tomasulo实例
Note:不像是记分牌,两个Lw指令可以一起流出
在第六拍的时候所有指令就全部流出了
减法完成之后,需要去做什么?可以看到加法指令在第八拍的时候需要
Add2拿到的两个操作数之后就立即启动
加法做完之后也可以把结果写回 这是和记分牌最不一样的地方
根本上来讲也是按序的流出,乱序的进行执行,乱序的写入
基于Tomasulo算法的动态循环展开
为了保证正确的异常行为,Tomasulo算法对指令的执行有一个限制:一旦有一条分支指令还没有执行完,其后的指令是不允许进入执行段的
动态存储器地址判别技术,解决存储器访问的时候的RAW、WAW、WAR冲突
第一次取数LD,由于Cache miss,需要8个时钟周期延迟,之后的取数LD,只需要一个时钟周期,存数SD需要3个时钟周期。
乘法需要4个时钟周期
Tomasulo循环实例
Loop: LD F0, 0(R1)
MULTD F4, F0, F2
SD 0(R1), F4
SUBI R1, R1, #8
BNEZ R1, Loop
存在隐含的换名情况
[[课件综合/计算机体系结构 - 第13讲.pdf#page=35&selection=236,0,239,7|计算机体系结构 - 第13讲, page 35]]
F0被动态的消除了
Tomasulo算法的优点
分布式硬件冲突检测
利用寄存器换名,彻底消除WAW和WAR这两种名相关
如果多个保留站等待同一个操作数,当操作数在CDB上广播的时候,它们可以同时获得所需要的数据
对于存储器访问,动态存储器地址判别技术可以解决RAW冲突(取操作数的时候判断)、WAR和WAW冲突(存操作数的时候判断)
能够达到很高的性能
Tomasulo 算法的缺点
高复杂性:需要大量的硬件
存在瓶颈:单个数据总线会引发竞争
需要额外的数据总线:在每个保留站上需要为每条总线都设置重复的硬件接口
为了保证正确的异常行为,对指令的执行有一个限制:
一旦有一条指令还没有执行完,其后的指令是不允许进入执行段
动态调度方法中的异常行为处理
指令乱序大大增加了异常处理的复杂度。
不精确异常(Imprecise Exeption):当指令i导致发生异常的时候,处理机的现场(状态)和严格按照程序顺序执行不相同。
精确异常(Precise Exception):处理机现场和严格按照程序新婚徐执行的时候指令i的现场相同
不精确异常产生的原因:
:heavy_check_mark: 流水线可能已经执行完按照程序顺序是位于指令i之后的指令
:heavy_check_mark:流水线可能还没有完成按照程序顺序是指令i之前的指令
动态调度方法中的异常行为处理
ADD指令LW指令SUB指令没有数据相关,可以乱序执行
SUB指令在LW指令执行完之前,更改R7
但是LW指令可能会硬气存储器的异常(如访存缺页、访存越界等)
控制相关的动态解决技术
分支预测缓冲
动态分支的两个理由
- n流出的处理器加速上限为n倍
- Amdahl定律提示:在较低CPI机器上,控制相关导致的空转对机器性能影响大
前面解决控制相关的静态策略
- 需要编译器将一条或者多条指令移动到流水线产生的分支延迟槽中
关于分支预测的两部分工作
- 预测的分支是否成功
- 执行分支目标指令
分支预测的效果
预测的准确率
分支的开销
- 预测正确的开销
- 预测错误的开销
- 决定分支开销的因素:流水线的结构、预测的方法、预测错误的时候的回复策略等
分支预测缓冲(BPB):原理
最简单的分支预测策略
BPB也被称为BHT(Branch History Table,BHT)
分支预测缓冲是一个小的存储器阵列
- 每个单元最小可以只有一位,记录最近一次的分支是否成功的信息
- 预测位为1的时候,标识预测分支成功,并从目标分支位置开始取指令
- 在预测错误的时候,要作废已经预取和分析的指令,恢复现场,并从零一条分支路径重新取指令
分支预测指令不成功和重新执行过程

一位的BOB的状态图
这种单位预测策略:
- 当分支不成功的时候,将会发生连续两次预测出错
- 2位预测策略能够改善这种情况
2位BPB工作原理
在两位的预测策略中,一个预测必须错误两次才会改变。
对于一个2096条记录的BPB,利用两位预测策略,用SPEC89测试,命中率位82%到99%
准确率最高的测试程序一般包含大量的循环
没有循环的线性代码一般准确率最差

还有另外一种的状态转化图:

4096单元2位BPB的预测错误率
测试程序位SPEC89
整数测试程序:平均11%
- gcc, espresso,eqntott,li
浮点测试程序:平均4%
- nasa7,matrix300,tomcatv
为什么?

BPB实现
BPB的实现方案
- 实现一个小而特殊的”cache“,利用指令地址进行寻址,在IF流水段访问
- 为指令cache中每一块增加附加位,与指令一起取出
如果一个指令在ID段被译码位分支指令,且对应的BPB标志位预测其成功,则
- 一旦PC已知,立刻从分支目标位置开始取指
对于改进MIPS,分支判断和计算分支目标地址都在ID段完成,BPB无效果
- 标题: CA-第十三讲
- 作者: Molaters
- 创建于 : 2023-11-24 11:30:49
- 更新于 : 2023-10-18 08:08:18
- 链接: https://molaters.github.io/2023/11/24/计算机体系结构/CA-第十三讲 Tomasulo 和 控制相关的动态解决技术/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。