实验三_实现Tomasulo算法模拟器.docxVIP

  • 313
  • 0
  • 约3.55千字
  • 约 12页
  • 2019-06-02 发布于浙江
  • 举报
实验三 实现 Tomasulo算法模拟器 一、实验目的 加深对指令级并行性及其开发的理解; 加深对Tomasulo算法的理解; 掌握Tomasulo算法在指令流出、执行、写结果各阶段对浮点操作指令以及load和store指令进行什么处理; 掌握采用了Tomasulo算法的浮点处理部件的结构; 掌握保留站的结构; 给定被执行代码片段,对于具体某个时钟周期,能够写出保留站、指令状态表以及浮点寄存器状态表内容的变化情况。 二、实验要求 设计和实现一个Tomasulo算法模拟器。 基本要求: 针对程序中直线型代码,可乱序执行、乱序完成。 能够正确输出每个周期之后保留站的内容。 保留站基本信息: 站名 状态 操作码 第一操作数值 第一操作数状态 第二操作数值 第二操作数状态 能够正确输出每个周期之后寄存器状态表的内容。 寄存器状态表基本信息: 寄存器名 寄存器状态(0:不等待保留站的内容;n 表示等待的保留站名n0) 寄存器内容(状态为0时,该值才有意义) 能够正确输出每个周期之后指令状态表的内容(指令分为浮点运算指令和load/store指令),指令状态分为流入,执行和写回。 指令状态表基本信息 标志出每条指令流出、执行、写回这三个阶段所在的周期号 较高要求: 实现带界面的模拟器,可动态输入指令并配置相关信息(e.g指令各个状态周期数,运算部件数目),并能正确输出上述基本要求中的相关信息。 实现带“再定序缓冲”的Tomasula算法模拟器,支持分支指令 三、实验报告 1.给定指令流输入测试 L.D F6, 21(R2) L.D F2, 20(R3) MUL.D F0, F2, F4 SUB.D F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 假设浮点功能部件的延迟时间:加减法2个周期,乘法10个周期,load/store2个周期,除法40个周期。而指令的流入和写回为1个周期。 a.给出第5个时钟周期后保留站的内容: 算法模拟器模板——保留站内容: 算法模拟器个人——保留站内容: 分析:第5个时钟周期流出了5条指令,其中load指令2条,mult指令1条,sub指令1条,divd指令1条。其中mult和sub指令与ld产生相关,相关寄存器编号为F2。M1与M2代表寄存器F6和F2数据已准备好。2条load指令执行完毕并且已经写回。 b.给出在第10个周期后,保留站,寄存器状态表的信息 算法模拟器模板——保留站内容: 算法模拟器个人——保留站内容: 算法模拟器模板——寄存器状态表信息: 算法模拟器个人——寄存器状态表信息: 分析:第10个时钟周期6条指令均已流出,且2条load指令执行完毕并且写回。sub指令也已执行完毕并写回,目前保留站中剩下add、mult、div3条指令。add指令正在执行阶段最后一个时钟周期,没有写回。div指令等待mult指令的结果。乘法指令还有5个时钟周期执行完毕。 2.实验设计思想 (1).模块划分及类成员定义 由所给条件可知,界面点击执行按钮后,自动弹出4个界面,一个load缓存站,一个保留站,一个寄存器状态信息表和一个指令状态信息表。 因此,为这四个模块设计五个类: a.LoadStation 定义成员:缓存站名称Qi,当前组件状态Busy,地址计算Addr,立即数或计算结果value。 b.ReservationStation 定义成员:当前保留站名称Qi,指令操作的类型Op,当前保留站工作状态Busy,第一个源操作数Vj,第二个源操作数Vk,产生第一个源操作数的保留站名称Qj,产生第二个源操作数的保留站名称Qk。 c.RegisterStation 定义成员:以当前寄存器为目的操作寄存器的保留站或缓存站名称Qi,寄存器名称state,寄存器中的值value。 d.Instruction 定义成员:当前指令名称name,目的操作寄存器opr1,源操作数一opr2,源操作数二opr3。 e.InstructionStation 定义成员:当前指令所在保留站或缓存站名称Qi,当前指令所处的状态state,指令执行所需要的时间,关联指令队列中的指令instruction。 以上5个类中,4个与Jpanel相关,只有InstructionStation(指令状态)为控制类,包含控制成员state。 并在公有方法init()中初始化类为对象,并赋初值。如下图(图中包含注释说明): (2).算法设计 算法设计的第一阶段为流程划分: 根据指令流入的方式、执行方式以及写回方式,初期定义为三个阶段,第一阶段为发射阶段,第二阶段为执行阶段,第三阶段为写回阶段。 在细化设计的过程中,执行阶段被分为两个过程,第一个过程为开始执行指令,第二个过程为完成执行指令。表现在面板中为两次刷新

文档评论(0)

1亿VIP精品文档

相关文档