windlx求最值实验报告.docx
- 文档编号:3626857
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:13
- 大小:139.24KB
windlx求最值实验报告.docx
《windlx求最值实验报告.docx》由会员分享,可在线阅读,更多相关《windlx求最值实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
windlx求最值实验报告
计算机科学与技术学院
《计算机体系结构》课程实验
学号:
班级:
专业:
计算机科学与技术
学生姓名:
2015年6月14日
实验报告
学生姓名:
学号:
时间:
2015年6月14日8:
00-17:
30
地点:
21号楼428实验室
实验课程名称:
计算机体系结构
一、实验名称:
求一系列正整数的最值(最大值、最小值)
二、实验原理:
1、WinDLX
WinDLX模拟器是一个图形化、交互式的DLX流水线模拟器,能够演示DLX流水线是如何工作的。
该模拟器可以装载DLX汇编语言程序(后缀为“.s”的文件),然后单步、设断点或是连续执行该程序。
CPU的寄存器、流水线、I/O和存储器都可以用图形表示出来,以形象生动的方式描述DLX流水线的工作过程。
模拟器还提供了对流水线操作的统计功能,便于对流水线进行性能分析。
2、流水线执行过程:
指令执行的5个阶段
(1)取指令周期
(2)指令译码/读寄存器周期
(3)执行/有效地址计算周期
(4)存储器访问/分支完成周期
(5)写回周期
3、流水线中的相关:
(1)结构相关:
当某一条机器指令需要访问物理器件时,如加法器,此时加法器正被另一条机器指令使用,从而产生结构相关;
(2)数据相关:
当某一条指令需要访问某个寄存器时,此时这个寄存器正被另一条指令所使用,从而产生数据相关;
(3)控制相关:
当程序执行到某个分支语句时,顺序执行的下一条语句将被跳过而去执行分支语句中满足条件的那条指令,从而产生控制相关。
三、实验目的:
1、通过该模拟实验,进一步掌握和巩固流水线的基本知识;
2、初步掌握在特定体系结构下的汇编代码的编写和优化;
3、培养运用所学知识解决实际问题的能力
4、对流水线性能分析
5、了解影响流水线效率的因素
6、了解各类相关及解决方法
四、实验内容:
使用WinDLX模拟器,对zuizhi.s做如下分析:
(1)分析zuizhi.s和imput.s输入顺序不同时产生的影响。
(2)分析zuizhi.s中汇编语言含义,同时分析程序执行流程。
(3)观察程序中出现的数据/控制/结构相关。
指出程序中出现上述现象的指令组合。
(4)考察增加浮点运算部件对性能的影响。
(5)考察增加forward部件对性能的影响。
(6)观察转移指令在转移成功和转移不成功时候的流水线开销。
注意:
除
(2)以外,浮点加、乘、除部件都只有一个;
本问题中所有浮点延迟部件设置为:
加法:
2个延迟周期;乘法:
5个延迟周期;除法19个延迟周期。
五、实验器材(设备、元器件):
IBMPC兼容机
Windows3.0以上的操作系统
六、实验步骤及操作:
1、双击WinDLX图标运行WinDLX。
装入测试程序之前,先初始化WinDLX模拟器:
点击File菜单中的Resetall菜单项,弹出一个“ResetDLX”对话框。
然后点击窗口中的“确认”按钮即可。
2、选择File/LoadCodeorData,按如下步骤操作,可将zuizhi.s和input.s这两个程序装入主存:
点击zuizhi.s
点击select按钮
点击input.s
点击select按钮
点击load按钮
3、按F7键程序顺序执行观察6个子窗口的情况。
七、实验数据及结果分析:
1、先装入zuizhi.s再转入input.s时,因为程序顺序执行,地址顺序符合程序执行顺序,程序能够正确执行;顺序相反时,因为input.s的地址高,而程序顺序执行到input.s时将没有正确的输入窗口,程序执行到输出结果时,也不会出现结果
2、1)程序中出现数据相关因为下面两条指令,第二条指令要读r1而执行到此操作时第一条指令仍对r1进行操作
multur1,r1,r4
addr1,r1,r3
2)程序中出现控制相关,当程序执行下面指令时,第二条指令出现跳转指令时,第一条指令还没有执行完,所以出现控制相关
Jinput.loop
lwr2,SaveR2(r0)
3)程序中出现结构相关,当有多条语句有加法操作,而加法器只有一个并且来不及分配时,会产生结构相关
3、
.data;定义数据段,默认情况下数据段$DATA会被加载到内存0x1000地址处
Prompt:
.asciiz"Inputanintegerwhichisarray'ssizevalue>1:
"
;输入数据,指示要比较的数值个数
PromptNumber:
.asciiz"Inputthenumber:
"
;输入数据,只要要参加比较的具体数值
PrintfMin:
.asciiz"Theminfigureis:
%g\n"
;输出数据,得到最小值
PrintfMax:
.asciiz"Themaxfigureis:
%g\n"
;输出数据,得到最大值
.align2;表示下面采用字对齐
PrintPar1:
.wordPrintfMin
Printf1:
.space8;申请输出最小值的输出空间
.align2
PrintPar2:
.wordPrintfMax
Printf:
.space8;申请输出最大值的输出空间
PrintfValue:
.space1024
.text;第一代码段,默认情况下代码段$CODE会加载到内存0x100地址处
.globalmain;定义一个全局符号main,即该代码段的首地址
main:
;***ReadvaluefromstdinintoR1;将输入的数存入寄存器r1
addir1,r0,Prompt;将要参与求取最值的数据个数从标准输入输到寄存器r1中
jalInputUnsigned;跳转到InputUnsigned子程序处读取输入的参
数,同时将一条指令的地址存与r31中,即r31<-pc+4
addr2,r0,r1;将r1中的数值放到r2寄存器中,对输入进行数据控制
addr8,r0,r1;将r1中的数值放到r8寄存器中,对比较进行数
据控制
addr3,r0,0;将r3寄存器进行清零操作
addr6,r0,0;对r6寄存器进行清零操作,用于将第一个数进行最大值和最小值赋值的标记
InputArray:
beqzr2,ProcessPart;当r2为零时,表示输入完毕,跳转到ProcessPart
addir1,r0,PromptNumber;将要进行最值求解的数从标准输入输到寄存器r1中
jalInputUnsigned
swPrintfValue(r3),r1;;将r1寄存器中的数放入地址为PrintfValue(0x1060)的存储器中
beqzr6,Assignment;当r6为0时,将该数值赋值为最大值和最小值
Back1:
addir3,r3,4;将r3中的数值+4,表示将地址后移4字节(输入的数值为整型,占4个字节)
subir2,r2,1;r2中的数值+1,表示已经输入完一个数值
addir6,r6,1;将r6中的数+1,表示后面输入的数不再进行最大最小值的赋值操作
jInputArray;无条件跳转向InputArray标识的指令地址
Assignment:
lff10,PrintfValue(r3);将以PrintfValue为地址的存储区中的数放入f10寄
存器中
lff11,PrintfValue(r3);将以PrintfValue为地址的存储区中的数放入f11寄存器中
jBack1
ProcessPart:
addir3,r0,0;对r3进行清零操作
Loop:
beqzr8,End;当r8中的值为0是,跳转到End,表示所有的数据都已比较完毕
lff12,PrintfValue(r3);将以PrintfValue为地址的存储区中的数放入f12寄存器中
leff10,f12;f10与f12中的数进行比较,如果f10小于f12,fps为1,否则fps为0
bfptChange1;如果fps为1,则跳转向Change1标识符的地址指
令
leff12,f11;f12与f11中的数进行比较,如果f12小于f11,fps为1,否则fps为0
bfptChange2;如果fps为1,则跳转向Change2标识符的地址指
令
Back2:
addir3,r3,4
subir8,r8,1;r8寄存器中的数-1,表示已经比较晚一个数
jLoop
Change1:
;最大值交换
movi2fpf1,r0;将r0中的值传到f1中
addff2,f10,f1
addff10,f1,f12
addff12,f1,f2
jBack2
Change2:
;最小值交换
movi2fpf1,r0
addff2,f11,f1
addff11,f1,f12
addff12,f1,f2
jBack2
End:
addir3,r0,0;r3寄存器进行清零操作
sfPrintfValue(r3),f10;将寄存器f10中的数存放到以r3寄存器中所存数为地址的存储区中
addir3,r3,4;r3中的数值+4,改变地址
sfPrintfValue(r3),f11;将寄存器f11中的数存放到以r3寄存器中所存数为地址的存储区中
Output:
;输出结果
lff2,PrintfValue(r3)
cvti2df0,f2;单精度转双精度
sdPrintf1,f0;将双精度寄存器f2中的内容存Printf1地址单元中
addir14,r0,PrintPar1;将要输出的数据格式输到寄存器r14中
trap5;标准输出
subir3,r3,4
lff2,PrintfValue(r3)
cvti2df0,f2
sdPrintf,f0
addir14,r0,PrintPar2
trap5
Over:
trap0
4、输入比较个数为:
4;
输入比较数据为:
7,3,9,1;
输出结果:
最小值为1,最大值为9
5、因为程序的运行过程中,设置两个浮点加法器不能进行并行运算,所以2个floating对程序运行频率没什么提高,但是通过优化程序运行顺序,可以减少相关,提高流水线利用率。
6、尽量减少和消除程序中出现的相关
观察程序的流水过程,对流水中出现的相关指令进行增删或者移位,使得相关能够减少或者消除,从而提高流水线的效率。
详细如下:
(1)将zuizhi.s文件中的输入程序进行扩展可相应减少控制相关,如下所示:
beqzr2,ProcessPart
addir1,r0,PromptNumber
jalInputUnsigned
swPrintfValue(r3),r1
beqzr6,Assignment
addir3,r3,4
subir2,r2,1
addir6,r6,1
beqzr2,ProcessPart;重复执行
addir1,r0,PromptNumber
jalInputUnsigned
swPrintfValue(r3),r1
beqzr6,Assignment
addir3,r3,4
subir2,r2,1
addir6,r6,1
(2)input.s文件中的lbur3,0(r2)
seqir5,r3,10
bnezr5,Finish
subir3,r3,48
multur1,r1,r4
addr1,r1,r3
addir2,r2,1
jLoop
中的seqir5,r3,10bnezr5,Finish,我将后面一条指令的位置调整到后面,这样可以使得下面一条指令省了一次推后读,节省了时间。
修改如下:
lbur3,0(r2)
seqir5,r3,10
subir3,r3,48
bnezr5,Finish
multur1,r1,r4
addr1,r1,r3
addir2,r2,1
jLoop
(3)通过增加加法器,减少结构相关,如下所示:
(4)我还尝试了将其他指令的位置进行调动,或者是增删一些指令,使得程序中的相关尽量少,但是使得程序进入死循环或者是得到错误结果,所以仅做以上一些修改,稍微程序优化了。
具体信息如下所示:
上图中左为未消除相关时的信息,右为消除了相关的信息。
8、程序流程图:
八、实验结论:
程序的装入要严格按照顺序,顺序将影响程序的正确执行;
程序执行顺序,部件的个数都会对程序的执行产生影响;
为减少数据相关,采用重定向方式;
为减少控制相关,扩展循环代码,减少跳转;
为减少结构相关,器件的个数应该合理分配;
九、总结及心得体会:
通过该模拟实验,进一步掌握和巩固流水线的基本知识;
熟悉了程序的运行环境;
增强了运用所学知识解决实际问题的能力;
理解并熟悉了类汇编语言的应用;
报告评分:
指导教师签字:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windlx 求最值 实验 报告