1、Win-DLX 计算机系统结构课程设计教程徐洁 王华 编电子科技大学计算机学院2006 年 5 月1目 录实验一 熟悉 WinDLX 的使用.2实验二 结构相关.4实验三 数据相关. .6实验四 指令调度.8附录 实验报告.102实验一 汇编源程序的上机调试操作基础训练一实验目的:通过本实验,熟练掌握 WinDLX 模拟器的操作和使用,熟悉 DLX 指令集结构及其特点。二实验内容:(一)WinDLX 的安装:1. WinDLX 是一个基于 Windows 的模拟器, 能够演示 DLX 流水线是如何工作的。WinDLX 包含 windlx.exe 和 windlx.hlp 文件。同时,还需要一些
2、扩展名为.s 的汇编代码文件。按以下步骤在 Windows 下安装 WinDLX:1 WinDLX 创建目录,例如 D:WINDLX2 解压 WinDLX 软件包或拷贝所有的 WinDLX 文件(至少包含 windlx.exe, windlx.hlp)到这个 WinDLX 目录。2. 启动和配置 WinDLX:双击 WinDLX 图标,将出现一个带有六个图标的主窗口,双击这些图标会弹出子窗口.为了初始化模拟器, 点击 File 菜单中的 Reset all 菜单项,弹出一个“ResetDLX”对话框。然后点击窗口中的“确认”按钮即可。(二)程序介绍1. 求阶乘程序 fact.s这个程序说明浮点
3、指令的使用。该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。3该程序中调用了 input.s 中的输入子程序,这个子程序用于读入正整数。2. 程序 gcm.sgcm.s 程序从标准输入读入两个整数,求他们的 greatest common measure,然后将结果写到标准输出。3. 求素数程序 prim.sprim.s 程序计算若干个整数的素数。三实验要求:实验前要做好充分准备,包括 WinDLX 安装与调试步骤、程序运行方法,以及对模拟结果的分析等。四试验步骤1启动 WinDLX 模拟器 .装入测试程序之前,先初始化 WinDLX.2以运行求阶乘程序 fact.s 为例, 选择 F
4、ile / Load Code or Data,按如下步骤操作,可将 fact.s 和 input.s 这两个程序装入主存:将 fact.s 和 input.s 拷贝到 WinDLX 目录, 点击 fact.s 点击 select 按钮 点击 input.s 点击 select 按钮 点击 load 按钮3点击主窗口中的 Execution 开始运行。4程序 gcm.s 和 prim.s 的运行过程同上。五. 试验报告:通过上述使用 WinDLX,总结 WinDLX 的特点。4实验二 结构相关一实验目的:通过本实验,加深对结构相关的理解,了解结构相关对 CPU 性能的影响。二实验内容:1. 用
5、 WinDLX 模拟器运行程序 structure_d.s 。2. 通过模拟,找出存在结构相关的指令对以及导致结构相关的部件。3由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。4论述结构相关对 CPU 性能的影响,讨论解决结构相关的方法。三实验原理:结构相关是指因为程序的执行方向可能被改变而引起的相关。可能改变程序执行方向的指令通常有无条件转移、一般条件转移、复合条件转移、子程序调用、中断等。1无条件转移无条件转移指令一般能够在指令分析器中就执行完成,因此一般对指令执行部件的工作不会造成影响。2条件转移条件转移指令有两种:一般条件转移指令和复合条件转移指令。对于一般条
6、件转移指令,相关最严重的情况发生在条件码是上一条指令产生的。转移不成功对先行控制器的影响不大,而转移成功时,不仅指令执行过程变成了完全串行,而且要作废已经取到先行指令缓冲栈中的大量指令,从而白白增加了处理机与主存之间的通信量。对于复合条件转移指令,如果转移不成功,则就象一条普通的运算型指令一样。如果转移成功,不仅要全部或部分作废先行指令缓冲栈中已经预取的指令,还可能要作废先行操作栈中的指令和先行读数栈中的操作数,作废当前在指令分析器中分析的指令。四WinDLX 的窗口配置:1Statistics 窗口:将待运行程序装入主存后按 F5 使程序完成执行,出现消息“Trap #0 occurred“
7、 表明最后一条指令 trap 0 已经执行, Trap 指令中编号“0”没有定义,只是用来5终止程序。双击图标 Statistics。Statistics 窗口提供各个方面的信息:模拟中硬件配置情况、暂停及原因、条件分支、 Load/Store 指令、浮点指令和 traps。窗口中给出事件发生的次数和百分比。2WinDLX 可以在多种配置下工作。你可以改变流水线的结构和时间要求、存储器大小和其他几个控制模拟的参数。点击 Configuration / Floating Point Stages(点击 Configuration 打开菜单,然后点击 Floating Point Stages 菜
8、单项) ,选择如下标准配置:Count DelayAddition Units: 1 2Multiplication Units: 1 5Division Units: 1 19点击 Configuration / Memory Size ,可以设置模拟处理器的存储器大小。应设置为0x8000,然后,点击 OK 返回主窗口。在 Configuration 菜单中的其他三个配置也可以设置,它们是:Symbolic addresses, Absolute Cycle Count 和 Enable Forwarding。 点击相应菜单项后, 在它的旁边将显示一个小钩。五实验要求:实验前要做好充分准备
9、,包括 WinDLX 安装与调试步骤、程序运行方法,以及对模拟结果的分析等。六实验报告:1、程序运行说明。2、存在结构相关的指令对以及导致结构相关的部件说明。3、查看 Statistics 窗口中的各种统计数字,记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。 6实验三 数据相关一 实验目的通过本实验,加深对数据相关的理解,掌握如何使用定向技术来减少数据相关带来的暂停。二实验内容1在不采用定向技术的情况下(通过 Configuration 菜单中的 Enable Forwarding选项设置),用 WinDLX 模拟器运行程序 data_d.s 。4记录数据相关引
10、起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。5采用定向技术的情况下,用 WinDLX 模拟器再次运行程序 data_d.s。三实验要求:实验前要做好充分准备,包括 WinDLX 安装与调试步骤、程序运行方法,以及对模拟结果的分析等。四实验原理:1三种数据相关:“先读后写”、“先写后读”和“写-写”相关。2在流水线中建立专用数据路径来避免数据相关的基本原理是数据重定向。五WinDLX 的窗口配置:1Statistics 窗口:将待运行程序装入主存后按 F5 使程序完成执行,出现消息“Trap #0 occurred“ 表明最后一条指令 trap 0 已
11、经执行, Trap 指令中编号 “0”没有定义,只是用来终止程序。双击图标 Statistics。Statistics 窗口提供各个方面的信息:模拟中硬件配置情况、暂停及原因、条件分支、 Load/Store 指令、浮点指令和 traps。窗口中给出事件发生的次数和百分比。2Code 窗口:双击图标 Code,你将看到代表存储器内容的三栏信息,从左到右依次为:地址 (符号或数字 )、命令的十六进制机器代码和汇编命令。点击主窗口中的 Execution 开始模拟。在出现的下拉式菜单中,点击 Single Cycle 或按 F7 键,模拟就向前执行一步。3Breakpoint 窗口:当通过 Cod
12、e 窗口观察代码时 (如果未打开,双击图标 Code),你会看到接下来的几条指令几近一样,它们都是 sw-操作:将寄存器中的数写入存储器中。重复按 F7 将7很枯燥,因此,我们使用断点加快此过程。现在,请指向 Code 窗口中包含命令 trap 0x5 的 0x0000015c 行,此命令是写屏幕的系统调用。单击命令行,然后点击主窗口菜单 Code,单击 Set Breakpoint (确保命令行仍被标记!) ,将弹出一个新的“Set Breakpoint“ 窗口。通过此窗口,你可以选择命令运行到流水线的哪一阶段时,程序停止执行。缺省为 ID 段。点击 OK 关闭窗口。在Code 窗口中, t
13、rap 0x5行上出现 了“BID“ ,它表示当本指令在译码段时,程序中止执行。如果想查看已定义的断点,你只要单击图标Reakpoints,将弹出一个小窗口,其中显示了所有断点。重新使窗口图标化。现在你只要点击Execution / Run 或按F5,模拟就继续运行。会出现一个对话框提示你“ID-Stage: reached at Breakpoint #1“,按“确认 ”按钮关闭。点击Clock cycle diagram窗口中的trap 0x5行,你将看到模拟正处于时钟周期14。trap 0x5行如下所示:原因是:无论何时遇到一条trap指令时,DLX 处理器中的流水线将被清空。在Info
14、rmation 窗口(双击 trap行弹出)中,在IF段 显示消息“3 stall(s) because of Trap-Pipeline-Clearing!“。 (不要忘了按OK关闭窗口)。指令 trap 0x5 已经写到屏幕上,你可以通过点击主窗口菜单条上的 Execute / Display DLX-I/O 来查看。六实验报告:1程序 data_d.s 装入主存运行后记录下 Statistics 窗口中的各种统计数字:总的周期数和暂停数( RAW ,Control,Trap ,Total) ,然后关闭窗口。2 点击 Configuration 中的 Enable Forwarding 使
15、定向无效(去掉小钩),打开断点 Breakpoints 图标并点击 Breakpoints 菜单,删除所有断点,然后按 F5,键入 20 后,按 Enter ,程序一直运行到结束。3 再次打开 Statistics 窗口,记下新的统计数字。计算暂停时钟周期数占总执行周期数的百分比。计算采用定向技术后性能提高的倍数。8实验四 指令调度一实验目的通过本实验,加深对指令调度的理解,了解指令调度技术对 CPU 性能改进的好处。二实验内容1. 通过 Configuration 菜单中的“Floating point stages”选项,把除法单元数设置为 3,把加法乘法除法的延迟设置为 3 个时钟周期。
16、2. 用 WinDLX 模拟器运行调度前的程序 sch-before.s 。记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。3. 用 WinDLX 模拟器运行调度后的程序 sch-after.s ,记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。4. 根据记录结果,比较调度前和调度后的性能。5. 论述指令调度对于提高 CPU 性能的意义。三实验要求:实验前要做好充分准备,包括 WinDLX 安装与调试步骤、程序运行方法,以及对模拟结果的分析等。四实验原理:在非线形流水线中,由于存在有反馈回路,当一个任务在流水线中流过时,在同一个功能段中可能要经过多次。因此不能每
17、一个时钟周期向流水线输入一个新任务,否则会发生在同一个时刻有几个任务争用同一个功能段的情况。这种情况称为功能部件冲突,或流水线冲突。为了避免冲突,一般采用延迟输入新任务的方法。应该间隔多少时钟周期向流水线输入一个新任务就是非线性流水线的调度问题。非线性流水线调度的就是找出一个最小的循环周期,按照这周期向流水线输入新任务,流水线的各个功能段都不会发生冲突,而且流水线的吞吐率和效率最高。五WinDLX 的窗口配置:点击 Configuration / Floating Point Stages(点击 Configuration 打开菜单,然后点9击 Floating Point Stages 菜单
18、项) ,选择如下标准配置:Count DelayAddition Units: 1 2Multiplication Units: 1 5Division Units: 1 19在本实验中,将标准配置更改为以下配置:Count DelayAddition Units: 1 3Multiplication Units: 1 3Division Units: 3 3六实验报告:1将程序 sch-before.s 装入主存后运行后,记录程序运行过程中各种相关发生的次数以及程序执行的总时钟周期数。2将程序 sch-after.s 装入主存后运行后,记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。3根据记录结果,比较调度前和调度后的性能。