《计算机体系结构》第三次实验 WinDL流水线实验.docx

上传人:牧羊曲112 文档编号:3187078 上传时间:2023-03-11 格式:DOCX 页数:8 大小:39.84KB
返回 下载 相关 举报
《计算机体系结构》第三次实验 WinDL流水线实验.docx_第1页
第1页 / 共8页
《计算机体系结构》第三次实验 WinDL流水线实验.docx_第2页
第2页 / 共8页
《计算机体系结构》第三次实验 WinDL流水线实验.docx_第3页
第3页 / 共8页
《计算机体系结构》第三次实验 WinDL流水线实验.docx_第4页
第4页 / 共8页
《计算机体系结构》第三次实验 WinDL流水线实验.docx_第5页
第5页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《《计算机体系结构》第三次实验 WinDL流水线实验.docx》由会员分享,可在线阅读,更多相关《《计算机体系结构》第三次实验 WinDL流水线实验.docx(8页珍藏版)》请在三一办公上搜索。

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

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

3、nfiguration菜单中的选项,将除法单元数设置为3,将加法乘法除法的延迟设置为3个时钟周期。 3、用WinDLX模拟器运行调度前的程序sch-before.s 。记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。 4、用WinDLX模拟器运行调度后的程序sch-after.s ,记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。 1 综合实验 在WinDLX上运行如下代码序列: LOOP: LW ADDI SW ADDI SUB R1,0(R2) R1,R1,#1 0(R2),R1 R2,R2,#4 R4,R3,R2 BNEZ R4,LOOP 其中:R3的初值

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

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

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

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

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

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

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

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

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

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

14、098 + 11 = 991。 3、按照题的要求对该循环中的指令进行调度,采用的调度方法为:将独立执行的指令“ADDI R2, R2, #4”前移至“LW R1, 0(R2)”后;将分支指令前的一条指令“SW 0(R2), R1”修改为“SW -4(R2), R1”,后移至分支指令“BNEZ R4, LOOP”后作为延迟槽中的指令。调度后程序如下所示: 将调度后的程序保存为3_4_after.s,导入WinDLX,设定为采用定向技术,运行该程序。在一个循环周期内,该指令序列的流水线时空图如下所示: 由上图可以看出,在采用预测分支失败的策略处理分支指令时,分支指令“BNEZ R4, LOOP”跳

15、转成功后,停止了其后继指令“SW -4(R2), R1”的执行,直接转向分支目标指令“LW R1, 0(R2)”处执行。在这种情况下,执行一个循环需要 -3-=7个时钟周期。 在一个循环周期内,指令序列的流水线时空图如下所示: 8 与WinDLX中运行出的流水线时空图不同之处在于,这里是采用单周期延迟分支 的方法处理分支指令的,延迟槽中的指令为“SW -4(R2), R1”。虽然分支能够成功,但 是仍然要把延迟槽指令顺利执行完。 可知,执行完一个循环需要的时钟周期数为:7 -1 =6。 执行完整个程序所需要的时钟周期数为 698 + 11 = 598。 4 实验总结: 通过本次实验,我对WinDLX的流水线运行分析,包括流水线单步执行、每个流水段功能、流水线建立与排空、定向技术等内容有了很好的掌握;知道其运行情况,能够根据程序段分析其运行位置及存储情况。 9

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号