实验报告——精选推荐
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
实验⼀熟悉WinDLX的使⽤
实验⽬的:
通过本实验,熟练掌握WinDLX模拟器的操作和使⽤,熟悉DLX指令集结构及其特点。
实验内容:
1. 参考《WinDLX 教程》,熟悉掌握WinDLX的配置和使⽤,掌握“Register”,
“Code”,“Pipeline”,“Clock Cycle Diagram”,“Statistics”和“Breakpoints”
等窗⼝的特性和⽤法。
2. ⽤WinDLX模拟器执⾏求阶乘程序fact.s。
这个程序说明浮点指令的使⽤。
该程序从标准输⼊端读⼊⼀个整数,求其阶乘,然后将结果输出。
该程序中调⽤了input.s中的输⼊⼦程序,这个⼦程序⽤于读⼊正整数。
3. 查阅资料,熟悉理解DLX指令,画出各程序的流程图。
实验结果如图所⽰:
实验⼆结构相关
实验⽬的:
(1)了加深对计算机流⽔线基本概念的理解。
实验内容和步骤:
1.理解预备知识中关于流⽔线各段操作的描述,进⼀步理解流⽔线窗⼝中各段的功能,掌
握各流⽔寄存器的含义(查看WinDLX软件中的help)。
(⽤⿏标双击各段,可以看到各流⽔寄存器的内容)。
填写下列各寄存器的含义:
IMAR:__指令内存地址寄存器_____________________
IR:____指令寄存器________________
A,B:____ALU操作数寄存器A和B__________________
BTA:___分⽀⽬标地址寄存器___________________
ALU:______ALU输出寄存器________________
DMAR:_____数据内存地址寄存器________________
SDR:_______存数据寄存器____________
LDR:_______取数据寄存器____________________
2.观察程序在流⽔线中的执⾏情况,步骤如下:
①加载程序structure_d.s。
②关闭“Enable Forwarding”定向功能。
③选定“Absolute Cycle Count”项。
④⽤单步执⾏⼀个周期的⽅式执⾏该程序,观察每⼀个周期中,各段流⽔寄存器内容
的变化、指令的执⾏情况(“Code”窗⼝)以及时钟周期图。
⑤当执⾏到第25个时钟周期时,各段分别正在处理的指令是:
IF:___IMAR<-PC(=loop+0x18)__ IR<-Mem[MAR](=0x00822822)
PC<-PC+4(=loop+0x1c)_______
ID:____________(空)_________________
intEX:_____ALU<-A+(8)(=0x190)(A=0x188)_______________________
MEM:_______Noting to do_____________________
WB:_________D2<-ALU(=2)_____________________
⑥这时各流⽔寄存器中的内容为:
IMAR:____0x0000012c______________________
IR:_______0x00822822______________________
A,B:______0x00000188____0x00000000__________________
ALU:_____0x00000190______________________
3.观察和分析结构相关对CPU性能的影响,步骤如下:
①重新加载程序structure_d.s。
②执⾏该程序,找出存在结构相关的指令对以及导致结构相关的部件。
③记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执⾏周期数的百
分⽐。
④把浮点加法器的个数改为4个。
⑤再次重复执⾏①~③的⼯作。
⑥记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执⾏周期数的百
分⽐。
⑦分析结构相关对CPU性能的影响,讨论解决结构相关的⽅法。
实验三数据相关
实验⽬的:
(1)了加深对计算机流⽔线基本概念的理解。
(4)掌握如何使⽤定向技术来减少数据带来的暂停。
实验内容和步骤:
1. 启动WinDLX。
2. 观察不采⽤定向技术的情况下的数据相关,步骤如下:
①全部复位。
②加载程序data_d.s。
③关闭定向功能,通过Configuration菜单中的Enable Forwarding选项设置。
④⽤单步执⾏⼀个周期的⽅式执⾏该程序,同时查看时钟周期图,列出在什么时候发⽣了RAW冲突。
⑤记录数据相关引起的暂停时钟周期数以及程序执⾏的总时钟周期数,计算暂停时钟周期数占总执⾏周期数的百分⽐。
3. 观察采⽤定向技术的情况下的数据相关,步骤如下:
①全部复位。
③打开定向功能,通过Configuration菜单中的Enable Forwarding选项设置。
④⽤单步执⾏⼀个周期的⽅式执⾏该程序,同时查看时钟周期图,列出在什么时候发⽣了RAW冲突,并与步骤2-④的结果进⾏⽐较。
⑤记录数据相关引起的暂停时钟周期数以及程序执⾏的总时钟周期数,计算暂停时钟周期数占总执⾏周期数的百分⽐。
4. 根据上⾯记录的数据,计算采⽤定向技术后性能提⾼的倍数。
实验结果:
关闭定向功能时发⽣RAW冲突的时钟周期为7,11和14;程序执⾏的总时钟周期数为15,暂停时钟周期数为3,⽐率为3/15=0.2
打开定向功能时发⽣RAW冲突的时钟周期为2,3,6,7,10,11,13,14;程序执⾏的总时钟周期数为15,暂停时钟周期数为8,⽐率为8/15=0.5625
实验四指令调度
实验⽬的:
(1)加深对指令调度的理解。
(2)熟练掌握⽤指令调度技术解决流⽔线中的数据相关的⽅法。
(3)了解指令调度技术对CPU性能改进的好处。
实验内容和步骤:
1. 启动WinDLX。
2. 根据实验⼆中的预备知识中关于流⽔线各段操作的描述,进⼀步理解流⽔线
窗⼝中各段的功能,掌握各流⽔寄存器的含义(⽤⿏标双击各段,可以看到各流⽔寄存器的内容)
3. 通过Configuration菜单中的“Floating point stages”选项,把除法单元数设置
为3,把加法﹑乘法﹑除法的延迟设置为3个时钟周期。
4. 观察调度前的程序执⾏时的数据相关,步骤如下:
①加载程序sch-before.s。
②关闭定向功能,通过Configuration菜单中的Enable Forwarding选项设置。
③记录程序执⾏过程中各种相关发⽣的次数以及程序执⾏的总时钟周期数。
④打开定向功能,通过Configuration菜单中的Enable Forwarding选项设置。
⑤执⾏该程序。
观察程序在流⽔线中的执⾏情况,记录程序执⾏过程中各种相关发⽣的次数以及程序执⾏的总时钟周期数。
5. 观察调度后的程序执⾏时的数据相关,步骤如下:
①全部复位。
通过Configuration菜单中的“Floating point stages”选项,把除法单元数设置为3,把加法﹑乘法﹑除法的延迟设置为3个时钟周期。
②采⽤指令调度技术对程序进⾏指令调度,消除冲突。
将调度后的程序存到sch- after.s⽂件中。
③加载程序sch-after.s。
④打开定向功能,通过Configuration菜单中的Enable Forwarding选项设置。
⑤执⾏该程序。
观察程序在流⽔线中的执⾏情况,记录程序执⾏的总时钟周
期数。
6. 根据记录结果,⽐较调度前和调度后的性能。
实验调度前使⽤的总时钟周期数为35,⽽实验调度钱没法实现,因此得不出总时钟周期数。