一、实验目的
- 了解Tomasulo算法的模拟软件
- 掌握Tomasulo算法的运行过程及其原理
二、实验内容
- 了解Tomasulo算法的模拟软件
运行Tomasulo算法的模拟软件,了解其使用说明。 - 掌握Tomasulo算法的运行过程及其原理
可任意设置一系列指令(当然,按软件自动给出的6条指令也可以),然后,按步进方式运行。每运行一步,均对保留站的状态变化进行解释(如果状态无变化,即只有时钟改变时,可不予解释),直至运行结束。解释的内容包括:
- 指明哪条指令从一种状态变到另一种状态。状态包括: 流出(我们称为发射)、执行、写结果。
- 对于指令的状态变化,保留站(当然也可以包括寄存器、load部件)发生了哪些变化。
- 最后,分别举例解释一下为什么Tomasulo算法消除了这些指令中的WAR和WAW冒险。
三、 实验过程
- 了解Tomasulo算法的模拟软件
运行Tomasulo算法的模拟软件,了解其使用说明。
(1) 设置指令和参数
本模拟器最多可以模拟10条指令。可以在指令区选择和设置所要的指令。指令区如图所示
可以选择的指令有以下5种:
i. L.D指令,从主存中读取一个双精度浮点数;
ii. ADD.D指令:双精度浮点加法指令
iii. SUB.D指令:双精度浮点减法指令
iv. MULT.D指令:双精度浮点乘法指令
v. DIV.D:双精度浮点除法指令
指令的各参数可以从各自的下拉框中选择
(2) 在窗口的右上区域设置各部件的执行时间(时钟周期数),如图所示
其中“复位“的作用是使所有设置恢复为默认值。
(3) 执行
点击执行按钮,就进入执行状态。可以用中间的按钮来控制指令的执行,包括“步进”、“退一步”等。按退出按钮即可回到设置指令和参数页面。向后执行后,状态表中有色的字段表示其内容发生了变化。
(4) 对比状态表
在每一个状态表的右上角都有一个小三角,用鼠标点击后,可以看到上一个时钟周期的内容。
(5) 指令状态表
如图所示,它列出了各指令什么时候执行到了哪一步。其中的数字表示时钟周期,“~”表示时钟周期期间。
- 掌握Tomasulo算法的运行过程及其原理
(1) 算法的运行过程及其原理
Tomasulo算法,采用的是寄存器重命名的方法来消除寄存器数据流之间的假相关,即用虚拟寄存器集代替真实的FPR,虚拟寄存器集在tomasulo算法中由每一功能单元所带的保留站、取数缓冲区和存数缓冲区组成。
第一步:发射
从FP OP Queue中取出指令。如果保留站空闲,控制机发射指令、发射操作数。
第二步:执行
如果两个操作数都已就绪,就执行;如果没有就绪,就观测公共数据总线等待所需结果
第三步:写结果
通过公共数据总线将结果写入到所有等待的部件;标记保留站可用
(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
各部件的执行时间维持默认值。
i. 周期1:取出第一条指令L.D F6, 24(R2),地址偏移量24写入LOAD1,LOAD1名存入寄F6。
ii. 周期2:取出第二条指令L.D F2, 12(R3),地址偏移量12写入LOAD2,LOAD2名存入寄器F2,同时第一条指令开始执行,LOAD1上写入绝对地址。
iii. 周期3:取出第三条指令MUL.D F0, F2,F4,第一条指令完成,第二条指令开始执行,LOAD2上写入绝对地址。保留站中存入待运算的操作数和操作。寄存器F0上QI写入保留站中待运算命令的名称。
iv. 周期4:取出第四条指令SUB.D F8,F6,F2,第二条指令执行完成,第一条指令写入结果M1到寄存器F6,保留站中存入第四条指令的待运算操作数和操作。LOAD1清空。
v. 周期5:取出第五条指令DIV.D F10,F0,F6,第二条指令写结果M2到寄存器F2,LOAD2 清空。保留站中存入第五条指令的待运算操作数和操作。
vi. 周期6:取出第六条指令ADD.D F6,F8,F2,第三条和第四条指令开始执行,相关的操作数和操作符被存入保留站
vii. 周期7:第四条指令执行完成,保留站中的第三条指令继续执行。
viii. 周期8:第四条指令写结果M3到寄存器F8,保留站中存放第四条指令的位置清空,第三条指令继续执行。
ix. 周期9:第六条指令开始执行。第三条指令继续执行。 周期10:第六条指令执行完成,第三条指令继续执行。
x. 周期11:第六条指令写结果M4到寄存器F6中,清空保留站中原来存放第六条指令的位置。第三条指令继续执行。
xi. 周期12~15:第三条指令继续执行,直到完成。
xii. 周期16:第三条指令写结果M5到寄存器F0,保留站中原来存放第三条指令的位置清空。
xiii. 周期17~56:第五条指令开始执行,直到结束
xiv. 周期57:第五条指令执行结束后写结果M6到F10,保留站中原来存放第五条指令的位置清空。执行完毕。
3. 为什么Tomasulo算法消除了WAR和WAW冒险。
Tomasulo的FU称做保留站,保留站可以完成寄存器重命名,避免WAR、WAW。它采用寄存器重命名的方法来消除寄存器数据流之间的假相关,即用虚拟寄存器集代替真实的FPR,虚拟寄存器集在tomasulo算法中由每一功能单元所带的保留站、取数缓冲区和存数缓冲区组成。保留站可以多于寄存器,实现更多编译器无法完成的优化。
实验所用软件:
Tomasulo算法模拟器(张晨曦教授)