学习笔记——体系结构_乱序执行之Tomasulo算法与记分牌算法

本文详细探讨了指令级并行中的数据相关性问题,重点介绍了记分牌算法和Tomasulo算法。记分牌算法通过一个记分牌系统动态调度指令,减少RAW停顿,但无法处理WAR和WAW相关性。Tomasulo算法则通过寄存器重命名和保留站来消除WAR和WAW竞争,实现更高效乱序执行。两者在硬件组织方式和写结果方法上存在差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在网上找tomasulo算法和记分牌算法,发现基本只有一个哥们的文档,在所有的网页间转载粘贴。不过我发现现在书上已经没有多少介绍记分牌算法了。所以就详细研究下这两个算法。

参考了网页资料:

http://wenku.baidu.com/view/65206e8fbceb19e8b9f6ba05.html


1、指令级并行的相关性

1.1、对于指令的相关性:

  • 结构相关是无法实际解决的,因为处理器已经造好了;
  • 控制相关是通过分支预测解决的,控制相关包括:分支指令、函数调用;
  • 数据相关其实本质是对寄存器的读写操作先后顺序造成的相关。对于此类相关,就有记分牌算法和tomasulo算法来解决。

进一步分析,数据相关分为:RAW、RAR、WAR、WAW这四类,其中的RAR不是真正的数据相关,因此寄存器不会因为读而改变。真正需要处理的是RAW以及WAW和WAR这三种。在顺序执行的指令流水线中,WAR和WAW是不会出现问题的,因为指令顺序指令,后面的W不会覆盖前面的R或者W;但是对于乱序执行就不一样了,需要有算法解决;而对于RAW,道理也一样。

2、记分牌算法

2.1、记分牌算法核心思想

记分牌算法的实现核心是系统中存在有一个“记分牌”,这个记分牌记录了运算部件和寄存器的数据相关性,即如果运算部件需要的寄存器数据准备好,就可以执行,执行完之后,释放寄存器。在这种情况下,就可以实现指令的乱序执行。

2.2、记分牌算法执行四个过程:

  1. 过程1:指令流出阶段,检测结构相关——如果当前功能部件空闲、并且没有其他指令使用相同的目的寄存器,则记分牌把指令发射到该功能部件,如果存在结构相关或WAW相关,则停止发射,等待;(这个阶段仅观察目的寄存器,不管源寄存器)
  2. 过程2:读操作数阶段——如果之前的指令已经完成对源操作数寄存器的写,则记分牌允许指令读取源操作数,可以执行;(这个阶段处理源寄存器,解决RAW相关,这样指令就可以乱序执行了);
  3. 过程3:执行——部件执行指令,并在执行完毕后通知记分牌;
  4. 过程4:写回——这个时候检测是否出现WAR相关,即是否有前面的指令要读目的寄存器,如果没有WAR相关,则写回;如果有,则暂停该指令写回过程。

2.3、记分牌算法总结

Tomasulo算法实验报告 课程名称:高级计算机系统结构 学号: 姓名: 指导教师: 日期:2011年12月8日 Tomasulo算法实验报告全文共5页,当前为第1页。 Tomasulo算法实验报告全文共5页,当前为第1页。 实验目的 加深对指令集并行性及开发的理解。 加深对Tomasulo算法理解。 掌握Tomulo算法在指令流出、执行、写结果各阶段对浮点操作指令以及load和store指令进行什么处理。 掌握采用了Tomasulo算法的浮点处理部件的结构。 掌握保留站的结构。 给定被执行代码片段,对于具体某个时钟周期,能够写出保留站、指令状态表以及浮点寄存器状态表内容的变化情况。 实验平台 Tomasulo算法模拟器。 实验内容 1. 假设浮点功能部件的延迟时间为加减法2个周期,乘法10个时钟周期,除法40个时钟周期,load部件2个时钟周期。运行程序的代码段如下: L.D F6, 24(R2) L.D F2, 12(R3) MUL.D F0, F2,F4 SUB.D F8,F6,F2 DIV.D F10,F0,F6 ADD.D F6,F8,F2 当指令MUL.D写结果时,保留站中内容如下表所示: 当指令MUL.D写结果时,load缓冲器中内容如下表所示: 当指令MUL.D写结果时,寄存器状态表中的内容如下表所示: 观察分析: 周期1:取出第一条指令L.D F6, 24(R2),地址偏移量24写入LOAD1,LOAD1名存入寄存器F6。 周期2:取出第二条指令L.D F2, 12(R3),地址偏移量12写入LOAD2,LOAD2名存入寄存器F2,同时第一条指令开始执行,LOAD1上写入绝对地址。 周期3:取出第三条指令MUL.D F0, F2,F4,第一条指令完成,第二条指令开始执行,LOAD2上写入绝对地址。保留站中存入待运算的操作数和操作。寄存器F0上QI写入保留站中待运算命令的名称。 Tomasulo算法实验报告全文共5页,当前为第2页。 周期4:取出第四条指令SUB.D F8,F6,F2,第二条指令执行完成,第一条指令写入结果M1到寄存器F6,保留站中存入第四条指令的待运算操作数和操作。LOAD1清空。 Tomasulo算法实验报告全文共5页,当前为第2页。 周期5:取出第五条指令DIV.D F10,F0,F6,第二条指令写结果M2到寄存器F2,LOAD2清空。保留站中存入第五条指令的待运算操作数和操作 周期6:取出第六条指令ADD.D F6,F8,F2,第三条和第四条指令开始执行,相关的操作数和操作符被存入保留站 周期7:第四条指令执行完成,保留站中的第三条指令继续执行。 周期8:第四条指令写结果M3到寄存器F8,保留站中存放第四条指令的位置清空,第三条指令继续执行。 周期9:第六条指令开始执行。第三条指令继续执行。 周期10:第六条指令执行完成,第三条指令继续执行。 周期11:第六条指令写结果M4到寄存器F6中,清空保留站中原来存放第六条指令的位置。第三条指令继续执行。 周期12~15:第三条指令继续执行,直到完成。 周期16:第三条指令写结果M5到寄存器F0,保留站中原来存放第三条指令的位置清空。 周期17~56:第五条指令开始执行,直到结束 周期57:第五条指令执行结束后写结果M6到F10,保留站中原来存放第五条指令的位置清空。 2. 对于1相同的延迟时间和代码段 (1)在第3个时钟周期时,保留站内容如下表所示: 在第3个时钟周期时,load缓冲器内容如下表所示: 在第3个时钟周期时,寄存器状态表内容如下表所示: (2)步进5个时钟周期后,保留站内容如下表所示: Tomasulo算法实验报告全文共5页,当前为第3页。load缓冲器内容如下表所示: Tomasulo算法实验报告全文共5页,当前为第3页。 寄存器状态表中内容如下表所示: (3)再步进10个时钟周期后,保留站内容如下表所示: load缓冲器内容如下表所示: 寄存器状态表中内容如下表所示: 3. 浮点功能部件的延迟时间为加减法3个时钟周期,乘法8个时钟周期,除法40个时钟周期。load部件2个时钟周期。运行程序的代码段如下: L.D F12, 20(R5) L.D F2, 10(R6) MUL.D F6, F2,F10 SUB.D F0,F8,F2 DIV.D F10,F0,F12 ADD.D F8,F12,F2 在第3个时钟周期时,保留站内容如下表所示: load缓冲器内容如下表所示: 寄存器状态表中内容如下表所示: Tomasulo算法实验报告全文共5页,当前为第4页。 Tomasulo算法实验报告全文共5页,当前为第4页。 步进5个时钟周期后,保留站内容如下表所示: load缓冲器内容如下表所示: 寄存器状态表中内容如下表所示: 再步
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值