《计算机体系结构》第三次实验 WinDLX流水线实验_第1页
《计算机体系结构》第三次实验 WinDLX流水线实验_第2页
《计算机体系结构》第三次实验 WinDLX流水线实验_第3页
《计算机体系结构》第三次实验 WinDLX流水线实验_第4页
《计算机体系结构》第三次实验 WinDLX流水线实验_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验三 WinDLX流水线实验王宇航安全0901班09283020实验三 WinDLX流水线实验1 实验目的:通过本实验,加深对结构相关、数据相关和指令调度的理解,了解结构相关对CPU性能的影响,掌握如何使用定向技术来减少数据相关带来的暂停,了解指令调度技术对CPU性能改进的好处。2 实验内容:2.1 用WinDLX模拟器进行结构相关的分析 1、生成structure.s程序。用WinDLX模拟器运行该程序。 2、通过模拟,找出存在结构相关的指令对,以及导致结构相关的部件。 3、记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。2.2 用WinDLX模拟器分析数据相

2、关 1、生成data.s程序。 2、通过Configuration菜单中的选项,设定在不采用定向技术的情况下,用WinDLX模拟器运行程序data_d.s。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。 3、在采用定向技术的情况下,用WinDLX模拟器再次运行程序data_d.s。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。2.3 用WinDLX模拟器分析指令调度 1、生成sch-before.s及sch-after.s程序。 2、通过Configuration菜单中的选项,将除法

3、单元数设置为3,将加法乘法除法的延迟设置为3个时钟周期。 3、用WinDLX模拟器运行调度前的程序sch-before.s 。记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。 4、用WinDLX模拟器运行调度后的程序sch-after.s ,记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。2.4 综合实验(习题3.4)在WinDLX上运行如下代码序列:LOOP:LWR1,0(R2) ADDIR1,R1,#1SW0(R2),R1ADDIR2,R2,#4SUBR4,R3,R2BNEZR4,LOOP其中:R3的初值是R2+396。假设:在整个代码序列的运行过程中,所有

4、的存储器访问都是命中的,并且在一个时钟周期中对同一个寄存器的读操作和写操作可以通过寄存器文件“定向”。1、 在没有任何其他定向(或旁路)硬件的支持下,假设采用排空流水线的策略处理分支指令,且所有的存储器访问都是命中Cache,那么执行上述代码需要多少个时钟周期?2、 假设该流水线有正常的定向路径,且采用预测分支失败的策略处理分支指令,所有的存储器访问都命中Cache,那么执行上述代码需要多少个时钟周期?3、 假设该流水线有正常的定向路径和一个单周期延迟分支,请对该循环中的指令进行调度,但是不能增加指令的条数。计算执行上述代码所需要的时钟周期数。3 实验过程:3.1 用WinDLX模拟器进行结构

5、相关的分析3.1.1 实验过程: 用WinDLX打开之前编写好的structure.s程序,单步执行,查看Clock Cycle Diagram窗口中的变化: 可以看出指令“ADDIR2, R2, #8 ”和指令“LD F0, 0(R2)”发生结构冲突。可以看出“ADDIR2, R2, #8”、“ADDI R3, R3, #8” 和“SUBIR5, R5, #1”这三条指令和“ADDD F4, F0, F2”存在结构相关。导致结构相关的部件是存储数据和指令的存储器部件。通过单步执行可以在code窗口中观察到程序的LOOP段共循环了10次,而且上述的因结构冲突引起暂停的指令都是在LOOP循环中。

6、所以程序执行完毕后,因结构冲突引起的暂停周期数为2×10=20,由图3可知,程序总共执行了117个时钟周期。所以暂停时钟数占总执行周期的百分比为:20/117 = 17.09 %。3.1.2 结构相关对CPU性能的影响及解决结构相关的方法:上述四对指令在流水线中重叠执行时产生了对存储器访问的资源冲突,即结构相关问题。上述WinDLX的执行过程采用了流水化功能单元的解决办法来解决结构相关,CPU产生了暂停周期,使流水线的性能下降。且暂停周期占总执行周期的百分比还比较大,是一个不容忽视的问题。解决结构相关通常需要采用流水线功能单元的方法或资源重复的方法。既然流水线功能单元的方法引入的暂停

7、影响了流水线的性能,可以考虑采用资源重复的方法,即在流水线机器中设置相互独立的指令存储器和数据存储器,也可将Cache分割成指令Cache和数据Cache,这样就能够很好的消除结构相关。但是这样做会带来很大的硬件开销,对流水线机器而言,如果要在每个时钟周期内,能够支持取指令操作和对数据的存储访问操作同时进行,而又不发生结构相关,那么存储总线的带宽必须要加倍。所以在解决该问题时要在性能和开销两方面进行权衡。3.2 用WinDLX模拟器分析数据相关3.2.1 实验过程: 用WinDLX打开之前写好的data_d.s程序,配置Configuration菜单中的选项,设定不采用定向技术。记录数据相关引

8、起的暂停时钟周期数以及程序执行的总时钟周期数,结果如下:可以看出,在不采用定向技术的情况下,data_d.s程序总过执行了202个时钟周期,其中由数据相关引起的暂停周期为104个,占总执行周期的51.48%。配置Configuration菜单中的选项,设定采用定向技术。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,结果如下:可以看出,采用定向技术之后,data_d.s程序总过执行了128个时钟周期,其中由数据相关引起的暂停周期为30个,占总执行周期的23.44%。3.2.2 总结: 由上述记录可知,通过定向技术,减少了数据相关所引起的暂停周期的数量,缩短了程序的执行周期,整个性能

9、是原来的1.58倍。3.3 用WinDLX模拟器分析指令调度3.3.1 实验过程:通过Configuration菜单中的选项,将除法单元数设置为3,将加法乘法除法的延迟设置为3个时钟周期。用WinDLX模拟器运行调度前的程序sch-before.s 。记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。结果如下: 可以看出,sch-before.s程序执行的总时钟周期数为31,总暂停周期数为16,其中写后读相关(RAW)暂停周期为9个,Trap 暂停周期为7个。用WinDLX模拟器运行调度前的程序sch-after.s 。记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期

10、数。结果如下:可以看出,sch-after.s 程序执行的总时钟周期数为25,总暂停周期数为9,其中写后读相关(RAW)暂停周期为3个,Trap 暂停周期为6个。3.3.2 总结:经调度之后,程序执行的总时钟周期数从31减到了25,同时各种类型的暂停周期数也相应了减少了。通过编译器重新组织代码顺序来实现“指令调度”,消除了一部分的暂停周期,使流水线性能得到了提高。3.4 综合实验(习题3.4)1、 根据实验内容二中的data_d.s程序,将程序做修改如下,生成3_4_before.s: 其中R2是数组A的基址,R3是数组B的基址,R3 = R2+4*9= R2+36,模拟了9个循环。因为R3

11、=R2 + 396,所以共396/4 = 99个循环。 用WinDLX运行3_4_before.s,配置Configuration菜单中的选项,设定不采用定向技术。程序在一个循环周期内的流水线时空图如下所示:由图中分支指令后的trap指令的执行可以看出,WinDLX对分支指令采用的是预测分支失败的方法,即在分支指令取指后的下一个周期取下一条指令。当分支指令跳转成功时,流水线就把在分支指令之后取出的所有指令转化为空操作,并按分支目标地址重新取指令执行。可以看出,执行一个循环需要 -15-(-30)=15个周期。在一个循环周期内,指令序列的流水线时空图如下所示:S代表R-Stall。与WinDLX

12、中运行出的流水线时空图不同之处在于,这里采用的是排空流水线处理分支指令,即在第15时钟周期,当流水线在ID段检测到分支指令“BNEZ R4, LOOP”后,就暂停执行其后的所有指令,直到分支指令到达MEM段,确定是否分支成功并计算出新的PC值为止。这里,因为分支成功,所以重新取指令“LWR1, 0(R2)”执行。由图9可以看出,执行完一个循环需要的时钟周期数为:18 -1 =17. 由于R3 =R2 + 396,因此共有396/4 = 99个循环。故执行完整个程序所需要的时钟周期数为 17×98 + 18 = 1684。2、 用WinDLX运行3_4_before.s,配置Confi

13、guration菜单中的选项,设定采用定向技术。程序在一个循环周期内的流水线时空图如下所示: 由上述可知WinDLX对分支指令采用的是预测分支失败的方法。且由图10可以看出,在采用定向的条件下,执行一个循环需要-2-(-11)= 9个周期。在一个循环周期内,指令序列的流水线时空图如下所示: 与WinDLX中运行出的流水线时空图不同之处在于,这里分支指令后没有“TRAP #0”指令。因而在采用预测分支失败的策略处理分支指令的情况下,流水线中继续流水的是“LW R1, 0(R2)”指令。分支成功后重新取指令“LW R1, 0(R2)”执行。 由图可知,执行完一个循环需要的时钟周期数为:11 -1

14、=10。 执行完整个程序所需要的时钟周期数为 10×98 + 11 = 991。3、 按照题的要求对该循环中的指令进行调度,采用的调度方法为:将独立执行的指令“ADDIR2, R2, #4”前移至“LW R1, 0(R2)”后;将分支指令前的一条指令“SW 0(R2), R1”修改为“SW -4(R2), R1”,后移至分支指令“BNEZR4, LOOP”后作为延迟槽中的指令。调度后程序如下所示:将调度后的程序保存为3_4_after.s,导入WinDLX,设定为采用定向技术,运行该程序。在一个循环周期内,该指令序列的流水线时空图如下所示:由上图可以看出,在采用预测分支失败的策略处理分支指令时,分支指令“BNEZ R4, LOOP”跳转成功后,停止了其后继指令“SW -4(R2), R1”的执行,直接转向分支目标指令“LW R1, 0(R2)”处执行。在这种情况下,执行一个循环需要 -3-(-10)=7个时钟周期。 在一个循环周期内,指令序列的流水线时空图如下所示: 与WinDLX中运行出的流水线时空图不同之处在于,这里是采用单周期延迟分支的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论