体系结构实验求数组平均值.docx
- 文档编号:6624193
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:15
- 大小:1.04MB
体系结构实验求数组平均值.docx
《体系结构实验求数组平均值.docx》由会员分享,可在线阅读,更多相关《体系结构实验求数组平均值.docx(15页珍藏版)》请在冰豆网上搜索。
体系结构实验求数组平均值
计算机科学与技术学院
《计算机体系结构》课程实验
学号:
班级:
专业:
计算机科学与技术
学生姓名:
2017年5月7日
实验报告
学生姓名:
学号:
时间:
2017年5月7日8:
00-15:
50
地点:
21号楼376实验室
实验课程名称:
计算机体系结构
一、实验名称:
流水线中的相关——求数组平均值
二、实验原理:
1、指令流水技术
指令流水技术是指:
为提高处理器执行指令的效率,把一条指令的操作分成多个细小的步骤,每个步骤由专门的电路完成。
在DLX处理器中,如图1.1所示,一条指令的处理被分为5个步骤,分别为取指周期(IF)、译码周期(ID)、执行周期(EX)、访存周期(MEM)和写回周期(WB)。
图1.1指令执行的5个阶段
在指令的实际执行过程中,假设每个阶段都要花费一个时钟周期,如果没有采用流水线技术,那么这条指令执行需要5个时钟周期;如果采用了指令流水线技术,那么当这条指令完成“取指”后进入“译码”的同时,下一条指令就可以进行“取指”了,这样当执行多条指令时,每经过1个时钟周期就会完成一条指令的执行,提高的处理器的执行效率。
2、流水线中的相关
为保证流水方式带来最优的效率,必须让流水处理过程顺利进行,不发生中断。
但在实际流水中却会出现三种相关,影响流水线性能。
这三种相关分别为:
(1)结构相关:
当指令在重叠执行过程中,硬件资源满足不了指令重叠执行的要求,发生硬件资源冲突时,将产生“结构相关”;
(2)数据相关:
当一条指令需要访问某个寄存器,但是寄存器中的值是前面指令的执行结果,而这些指令均在流水线中重叠执行时,就可能引起“数据相关”;
(3)控制相关:
当流水线遇到条件分支指令或其他能改变PC值的跳转指令时,顺序执行的下一条语句将被跳过而去执行分支语句中满足条件的那条指令,将产生“控制相关”。
三、实验目的:
1、通过使用WinDLX模拟器,观察指令流水执行过程,加深对流水线的特点的理解;
2、通过编写具有实际功能的代码,在代码执行过程中分析流水线的变化,了解相关对流水线效率的影响;
3、分析发生相关时的代码,掌握三种相关产生的条件;
4、在掌握三种相关产生的条件之后,通过优化代码,学习如何避免这三种相关的发生。
四、实验内容:
1、使用DLX格式的汇编语言,编写汇编程序average.s,程序功能为实现数组求平均值;
2、在WinDLX运行程序,分析程序执行结果,验证程序的正确性;
3、合理设置加法器、乘法器、除法器数量与延迟,运行程序,观察流水情况,理解指令流水的工作方式;
4、在代码执行过程中分析流水线的变化,了解相关对流水线效率的影响;
4、分析引发三种相关的代码,明确相关发生的原因;
5、对代码及设置进行优化与调整,避免三种相关的发生,提高程序流水执行效率。
五、实验器材(设备、元器件):
Windows7
32位操作系统
PC机
六、实验步骤及操作:
1、运行WinDLX,按顺序加载程序代码average1.s和input.s,如图6.1所示:
图6.1加载程序
2、按F5键执行程序,按程序提示输入数据,查看程序执行是否正确;图6.2为程序执行时的输入与输出;
图6.2验证程序正确性
3、重新设置WinDLX并载入程序,按F7键执行程序,如图6.3所示,观察流水线变化,查找结构相关、数据相关和控制相关,分析发生相关的原因;
图6.3观察流水线变化
4、重新设置WinDLX并载入程序,分析程序结构,如图6.4所示,在程序中可能发生相关的地方设置断点,按F5键执行程序,再次确认三种相关产生的原因,程序执行结束后查看统计窗口,记录信息;
图6.4设置断点
5、根据以上分析原因,修改代码并调整WinDLX设置,尽可能避免相关的发生;
6、重新设置WinDLX,并载入修改后的程序average2.s与input.s,执行程序,观察相关是否被消除,程序执行完毕查看统计窗口,记录信息,与未修改前进行比较。
七、实验数据及结果分析:
1、运行程序
运行程序,设置数组大小为5,在数组中存储1、1、2、2、3这5个数字,计算平均值,输出结果如图7.1所示。
图7.1计算数字平均值结果
从图中可以看出,计算结果为1.8,与预期结果相符,计算正确,证明程序功能正常。
此时的统计窗口如图7.2所示,可以看到程序执行公用582个时钟周期,数据相关发生188次,结构相关发生18次,控制相关发生35次。
图7.2未进行任何优化时的统计结果
2、数据相关
如图7.3程序代码所示,在循环读入数组元素时,在上一条指令subir10,r10,1中减少r10的值,而在下一条指令bnezr10,push中要读取r10的值,此时会发生数据相关。
图7.3产生数据相关的代码
在实际执行程序时,观察流水线,如图7.4所示,bnezr10,push在译码阶段需要r10的值,而subir10,r10,1指令此时还在执行阶段,r10中的数据还未写回,所以需要等待r10数据,发生数据相关,产生两个时钟周期的延迟。
图7.4流水线中的数据相关
3、控制相关
如图7.5代码所示,在对addir2,r0,0进行译码时,如果bnezr10,push执行跳转,那么addir2,r0,0将不会执行,对其的译码失去意义,此时出现控制相关。
图7.5产生控制相关的代码
在程序实际执行时,观察流水线,如图7.6所示,在相应代码处出现控制相关。
图7.6流水线中的控制相关
4、结构相关
如图7.7所示,当两条除法指令重叠执行时,因为指令divff10,f10,f4在执行阶段使用除法器,指令divff9,f9,f4无法执行,此时硬件资源满足不了指令重叠执行的要求,发生硬件资源的冲突,此时产生结构相关。
图7.7流水线中的结构相关
八、消除相关:
1、利用重定向技术消除数据相关
采用重定向技术可以减少数据相关,重定向技术是将计算结果直接送到所需要的地方。
将WinDLX平台的Configuration菜单里的“EnableForwarding”勾选,即可以采用重定向技术。
采用重定向技术后运行程序,统计结果如图8.1所示。
图8.1采用重定向技术后的统计结果
从统计结果中可以看出,采用重定向技术数据相关由188减少为114,有效的减少了数据相关的发生。
再次分析图7.4中的数据相关,使用重定向技术会流水线如图8.2所示,可以看到指令subir10,r10,1在执行阶段,同时将数据送给bnezr10,push,将原来数据相关占用的两个时钟周期变为1个,减小了对流水线的影响。
图8.2流水线中的重定向
2、通过调整指令执行顺序消除数据相关
在发生数据相关的地方,对执行顺序无严格要求的指令进行调整,从而达到避免数据相关的发生。
如图8.3与8.4所示,图8.3为调整前的代码,图8.4为调整后的代码。
图8.3指令调整前
图8.4指令调整后
从图中可以看出,将指令subir10,r10,1与指令bnezr10,push指令执行次序分开,可以避免数据相关的发生。
通过多次对指令顺序的调整,执行程序,统计结果如图8.5所示。
图8.5调整指令顺序后统计结果
由统计结果可知,在进行5个数组元素的平均值计算时,数据相关由188降至172,当计算数据量增大时,提升效果会更加明显。
3、通过循环展开消除控制相关
可以通过循环展开技术减少控制相关。
在程序进行输入时,需要在循环中将数据存入数组,代码如图8.6所示。
图8.6循环获得数组元素
现将其循环展开两次,减少跳转指令的执行,从而减少控制相关发生的次数。
展开后代码如下:
;;getthearray
addir2,r0,0;r2==offsetaddressofArray
addir3,r0,0;r3==IndexofArray
push:
subir4,r10,1
beqzr4,lastPush;if(size==1){gotolastPush}
swfGetArray,r3;outputthepromptofgetarray
addir14,r0,PrintGetArray
trap5
jalInputUnsigned;
swArray(r2),r1;Array[offset]=r1
addir2,r2,4;offset+=4
addir3,r3,1;Index++
subir10,r10,1;size--
swfGetArray,r3;outputthepromptofgetarray
addir14,r0,PrintGetArray
trap5
jalInputUnsigned;
swArray(r2),r1;Array[offset]=r1
addir2,r2,4;offset+=4
addir3,r3,1;Index++
subir10,r10,1;size—
bnezr10,push;if(size!
=0){continuepush}
循环展开后,执行程序,执行完成的统计结果如图8.7所示。
图8.7循环展开后
由统计结果可知,在输入5个数组元素的情况下,依靠循环展开将控制相关由原来的35减小为33。
在数组数据量更多的情况下,循环展开对控制相关的消除效果会更加明显。
4、通过增加硬件来消除结构相关
因为程序中发生结构相关的原因为除法器件不能满足指令重叠执行,因此将除法器数量由1增加至2,如图8.8所示。
图8.8增加除法器
此时再次执行程序,程序执行完成的统计结果如图8.9所示。
图8.9增加除法器后统计结果
由统计结构可知,增加除法器后,结构相关已由原来的18减至0,对结构相关的消除效果十分明显。
九、程序流程与源码:
程序流程如图9.1所示,由两部分组成,第一部分获取数组大小,并循环输入数组各元素;第二部分循环累计数组和,并求平均值。
图9.1程序流程图
下面为程序源代码:
.data
GetSize:
.asciiz"Inputthesizeofarray:
"
GetArray:
.asciiz"Inputarray[%d]:
"
Sum:
.asciiz"\n\nSumofarrayis%d\n"
Avg:
.asciiz"Averageofarrayis%g\n\n"
.align2
PrintGetSize:
.wordGetSize
PrintGetArray:
.wordGetArray
fGetArray:
.space4
PrintSum:
.wordSum
fSum:
.space4
PrintAvg:
.wordAvg
fAvg:
.space8
;;4spance==1word:
[0-3][4-7]
Array:
.space200
.text
main:
;;getthesizeofarray,saveinr10
addir14,r0,PrintGetSize
trap5
jalInputUnsigned;readthesizeofarraytoR1
addir10,r1,0;r10==sizeofarray
;;r10=sizeofarray
;;getthearray
addir2,r0,0;r2==offsetaddressofArray
addir3,r0,0;r3==IndexofArray
push:
swfGetArray,r3;outputthepromptofgetarray
addir14,r0,PrintGetArray
trap5
jalInputUnsigned;
swArray(r2),r1;Array[offset]=r1
addir2,r2,4;offset+=4
addir3,r3,1;Index++
subir10,r10,1;size--
bnezr10,push;if(size!
=0){continuepush}
;;r10=indexofarray
;;r3=sizeofarray
;;Array[0..r3)sevethearray
;;getthesumofarray
addir2,r0,0;r2=offsetaddressofArray
addir9,r0,0;r9=sumofarray
getSum:
lwr4,Array(r2)
addr9,r9,r4;sum=sum+array(offset)
addir10,r10,1;Index++
addir2,r2,4;offset+=4
subir3,r3,1;size--
bnezr3,getSum;if(size!
=0){continuegetSum}
;;outputthesumofarray
swfSum,r9
addir14,r0,PrintSum
trap5
;;r10=sizeofarray
;;r9=sumofarray
movi2fpf10,r10
movi2fpf9,r9
cvti2ff10,f10
cvti2ff9,f9
divff2,f9,f10
cvtf2df0,f2
;;outputtheavgofarray
sdfAvg,f0
addir14,r0,PrintAvg
trap5
Finish:
jalInputUnsigned;pause
;***end
trap0
十、实验结论:
1、三种相关的发生会降低指令流水的效率;
2、利用重定向技术可以消除一定的数据相关的发生;
3、通过对执行顺序无严格要求的指令合理调整顺序,可以消除一部分数据相关的发生;
4、通过循环展开,可以降低跳转的发生,从而降低控制相关的发生;
5、通过增加硬件,可以避免结构相关的发生。
十一、总结及心得体会:
通过编写实际的汇编程序,在WinDLX模拟器上观察指令流水执行过程,加深了我对指令流水执行的理解,了解了三种相关对流水线效率的影响;通过分析相关发生时的代码,我掌握了三种相关产生的条件,并且可以进行相应的优化,学习了如何避免这三种相关的发生。
报告评分:
指导教师签字:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 体系结构 实验 数组 平均值