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

上传人:daj****de 文档编号:119704792 上传时间:2022-07-15 格式:DOCX 页数:10 大小:104.58KB
返回 下载 相关 举报
《计算机体系结构》第三次实验 WinDLX流水线实验_第1页
第1页 / 共10页
《计算机体系结构》第三次实验 WinDLX流水线实验_第2页
第2页 / 共10页
《计算机体系结构》第三次实验 WinDLX流水线实验_第3页
第3页 / 共10页
点击查看更多>>
资源描述
实验三 WinDLX 流水线实验王宇航 安全 0901班 09283020实验三 WinDLX 流水线实验1 实验目的:通过本实验,加深对结构相关、数据相关和指令调度的理解,了解结构相关对CPU性能 的影响,掌握如何使用定向技术来减少数据相关带来的暂停,了解指令调度技术对CPU性能 改进的好处。2 实验内容:用 WinDLX 模拟器进行结构相关的分析1、生成 structure.s 程序。用 WinDLX 模拟器运行该程序。2、通过模拟,找出存在结构相关的指令对,以及导致结构相关的部件。3、记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分 比。用 WinDLX 模拟器分析数据相关1、生成 data.s 程序。2、通过 Configuration 菜单中的选项,设定在不采用定向技术的情况下,用 WinDLX 模拟 器运行程序data_d.s。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数, 计算暂停时钟周期数占总执行周期数的百分比。3、在采用定向技术的情况下,用WinDLX模拟器再次运行程序data_d.s。记录数据相关 引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数 的百分比。用 WinDLX 模拟器分析指令调度1、生成 sch-before.s 及 sch-after.s 程序。2、通过Configuration菜单中的选项,将除法单元数设置为3,将加法、乘法、除法的延 迟设置为3 个时钟周期。3、用WinDLX模拟器运行调度前的程序sch-before.s。记录程序执行过程中各种相关 发生的次数以及程序执行的总时钟周期数。4、用WinDLX模拟器运行调度后的程序sch-after.s,记录程序执行过程中各种相关发 生的次数以及程序执行的总时钟周期数。综合实验(习题3.4)在WinDLX上运行如下代码序列:LOOP: LWRl,0(R2)ADDI R1,R1,#1SW0(R2),R1ADDI R2,R2,#4 SUB R4,R3,R2BNEZ R4,LOOP其中:R3的初值是R2+396。假设:在整个代码序列的运行过程中,所有的存储器访问 都是命中的,并且在一个时钟周期中对同一个寄存器的读操作和写操作可以通过寄存器文件 “定向”1、在没有任何其他定向(或旁路)硬件的支持下,假设采用排空流水线的策略处理分支指 令,且所有的存储器访问都是命中Cache,那么执行上述代码需要多少个时钟周期?2、假设该流水线有正常的定向路径,且采用预测分支失败的策略处理分支指令,所有的存 储器访问都命中Cache,那么执行上述代码需要多少个时钟周期?3、假设该流水线有正常的定向路径和一个单周期延迟分支,请对该循环中的指令进行调度, 但是不能增加指令的条数。计算执行上述代码所需要的时钟周期数。3实验过程:用WinDLX模拟器进行结构相关的分析实验过程:用WinDLX打开之前编写好的structures程序,单步执行,查看Clock Cycle Diagram窗 口中的变化:日 ddi rSjO.OxaId f0,0K0(r2)addi r2j2,0x8IF | ID | HE* | MEM |Int-Sagesrsddi rZr2,0w8 LOOP+Owc1raddd N LUCIP+kfOJ20w81rId f2,0x0r3)LOOP+Ow4IFIDintEXId n,0x0r2) LOOPMEM可以看出指令“ADDI R2, R2, #8 ”和指令“LD F0, 0(R2)”发生结构冲突。Instructions / Cyclesaddi r2j0,0w13Baddi r3j0r0x18B addi rSjO.OxaId fO/OxO(r2Id f2,0x0(r3 adddf4J0J2 addi EEO 昭 addi r3j3,tlKS subi r5j5,0x1I月II7I|-4 | | | J |0IF |ID|intEX|MEM|V/BIFID| intEXMEMWBIF|ID|mtEX|MEM|WBIF|ID|intEX|MEM、IF | ID | intEX | HlM | WBIF | ID曰ll| fackEX(1 | MEMIFStallIDiritEXStallIF | ID | 荷IF | 沁II可以看出 “ADDI R2, R2, #8”、“ADDIR3, R3, #8” 和 “SUBI R5, R5, #1 ” 这三条指令和“ADDD F4, F0, F2”存在结构相关。导致结构相关的部件是存储数据和指令的存储器部件。通过单步执行可以在code窗口中观察到程序的LOOP段共循环了 10次,而且上述的因Statistics.Tcitad :117 Cycle(s) executed. ID executed by 74 I nstructions.2 Inshuctiorifs turrentl in Pipslins.结构冲突引起暂停的指令都是在LOOP循环中。所以 程序执行完毕后,因结构冲突引起的暂停周期数为2X 10=20,由图3可知,程序总共执行了 117个时钟周期。所以暂停时钟数占总执行周期的百分比为:20/117 =17.09 %。结构相关对CPU性能的影响及解决结构相关的方法:上述四对指令在流水线中重叠执行时产生了对存储器访问的资源冲突,即结构相关问 题。上述WinDLX的执行过程采用了流水化功能单元的解决办法来解决结构相关,CPU产生 了暂停周期,使流水线的性能下降。且暂停周期占总执行周期的百分比还比较大,是一个不 容忽视的问题。解决结构相关通常需要采用流水线功能单元的方法或资源重复的方法。既然流水线功能 单元的方法引入的暂停影响了流水线的性能,可以考虑采用资源重复的方法,即在流水线机 器中设置相互独立的指令存储器和数据存储器,也可将Cache分割成指令Cache和数据 Cache,这样就能够很好的消除结构相关。但是这样做会带来很大的硬件开销,对流水线机 器而言,如果要在每个时钟周期内,能够支持取指令操作和对数据的存储访问操作同时进行, 而又不发生结构相关,那么存储总线的带宽必须要加倍。所以在解决该问题时要在性能和开 销两方面进行权衡。用WinDLX模拟器分析数据相关实验过程:用WinDLX打开之前写好的data_d.s程序,配置Configuration菜单中的选项,设定不采 用定向技术。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,结果如下:Statistics|-|n|x|Total:202 Cycle(s) eHecuted.ID eecuted by 85 Instructionfs:).2 Instructionfsj currently in Pipeline.Harduare conf igu.ration: Memory size: 3276S Bytes faddE-Glages: 1 ” required Cycles: 2 firiulEX-Slages: L required Cycles: 5 fdivE-Stages: 1, required Cycles: 19 Forwarding disabled.Stalls:RAW stalls: 104 (E1.48 of all Cycles WAW stalls: 0 (0.00 of all Cycles) Structural stalls: 0 (0.00 of all Cycles) Control stalls: 9 4.4G of all Cycles Trap stalls: 3 (1.48 of all Cycles)Total: 116Stall(s) (57.42Xof all Cycles)可以看出,在不采用定向技术的情况下,data_d.s程序总过执行了 202个时钟周期,其 中由数据相关引起的暂停周期为104个,占总执行周期的51.48%。配置Configuration菜单中的选项,设定采用定向技术。记录数据相关引起的暂停时钟 周期数以及程序执行的总时钟周期数,结果如下:lit Statistics.|n| 1Total:128 Cycle (s) executed. ID eKecuted by 85 Instructiorfs).2 Instruction(s) currently in Pipeline.Har-dwar-e con 1 gma 11 on : M emorp size: 32768 Eyles faddEX-Stages: L required Cycles: 2 fmulE-Slages: 1, required Cycles: 5 fdivEX-Stages: 1, required Cycles: 19 Forwarding enabled.Stalls:RAW stalls: 30 (2344底 of all Cycles), thereof: LD stalls: 20 (GG.G7 of RAW stalls) Branchyjump stalls: 10 (33.33 of RAW stalls) Floating paint stalls: 0 0.00 of RAW stalls)WAW stalls: (0.00 of 別 CyclesStructural stalls: (0.00 of 创 Cycles)Centro! wtmlk; 9 (7.03 of all Cycles)3可以看出,采用定向技术之后,data_d.s程序总过执行了 128个时钟周期,其中由数据 相关引起的暂停周期为30个,占总执行周期的23.44%。由上述记录可知,通过定向技术,减少了数据相关所引起的暂停周期的数量,缩短了程 序的执行周期,整个性能是原来的1.58倍。用WinDLX模拟器分析指令调度实验过程:通过Configuration菜单中的选项,将除法单元数设置为3,将加法、乘法、除法的延迟 设置为3个时钟周期。用WinDLX模拟器运行调度前的程序sch-before.s。记录程序执 行过程中各种相关发生的次数以及程序执行的总时钟周期数。结果如下:Statistica-|n| ITotal:31 Cycle(s) executed.ID eweculed by 1 G Instructiorfs).2 Instruction(s) currently in Pipeline.Hardware con 1 gnzra 11 on : Memorv size: 32768 Bytes faddEX-Stages: 1 required Cycles: 3 fmulE-Glag&s: 1required Cycles: 3 fdivEX-Stages: 3, required Cycles: 3 Forwarding enabled.Stalls:RAW stalls: 9 (29.03 of all Cycles, thereof: LD stalls: 1 (ll.nof RAW stalls) Branchyjump stalls: 0 (0.00 of RAW stalls Floating paint stalls: 8 100.00 of FiAW stalls WAW stalls: (0.00 of ll CyclesSlructural stalls: (0.00 of 创 Cycles)Control stalls: 0 (0.00 of all Cycles)Trap stalls: 1 (22.58S of all CyclesTotal: 16 Stalin (51.61 of all Cycles3可以看出,sch-before.s程序执行的总时钟周期数为31,总暂停周期数为16,其中 写后读相关(RAW)暂停周期为9个,Trap暂停周期为7个。用WinDLX模拟器运行调度前的程序sch-after.s。记录程序执行过程中各种相关发 生的次数以及程序执行的总时钟周期数。结果如下:j* Sts ti sti C5_ | MJTotal :25 Cclefs) executed. ID ewecuted by 1G Instructionfs.2 Instruction(s) currently in Pipeline.Hardwax-e conf igu.rat:lchi :MemoiiJ size: 32768 Btes faddEX-Stages: L required Cycles: 3 fmulEX-Stages: 1r required Cycles: 3 fdiyEX-Stages: 3, required Cycles: 3 Forwarding enabled.Stalls:RAW stalls: 3 12.00 of all Cycles), thereof: LD stalls: 1 33.33 oJ RAW stalls Branch/Jump stalls: 0 (0.00 of RAW stalls) Floatirg point stalls: 2 (66.67 of RAW stalls)WAW stalls: 0 (0.00 of all Cycles)Structural stalls: 0 (0.00 of all Cycles)Coritral stalls: (0.00% of all Cpcles) Trap stalls: 6 24.00 of all Cycles T otal: 9 St3lls (36.00 cf all Cycles)-i ii a 1 匸!可以看出,sch-after.s程序执行的总时钟周期数为25,总暂停周期数为9,其中写 后读相关(RAW)暂停周期为3个,Trap暂停周期为6个。总结:经调度之后,程序执行的总时钟周期数从31减到了 25,同时各种类型的暂停周期数也 相应了减少了。通过编译器重新组织代码顺序来实现“指令调度”消除了一部分的暂停周期,使流水 线性能得到了提高。综合实验(习题3.4)1、根据实验内容二中的data_d.s程序,将程序做修改如下,生成3_4_before.s:LHIADDUILHIADDUI匚DGP:LWADDI5冋ADDI吕比ENEETRAPA:.WORDB:冋ORDR2 ,SOXFFFFR2 fAiOXFFFFR3,&0XFFFFR3,3&0XFFFFRl,0 (K2 )RlrRlr#10 (R2 ) , R1R2.R2.44R4 f f R2R4,LOOF#00,4,0,12 ”23,32其中R2是数组A的基址,R3是数组B的基址,R3 = R2+4*9= R2+36,模拟了 9个循 环。因为R3 =R2 + 396,所以共396/4 = 99个循环。Clcck Cycle Diagramu5tibr4.r3j3bra: r4.L00PF | ID | rilEX | MEhi | 询 |l用WinDLX运行3_4_before.s,配置Configuration菜单中的选项,设定不采用定向技术。 程序在一个循环周期内的流水线时空图如下所示:由图中分支指令后的trap指令的执行可以看出,WinDLX对分支指令采用的是预测分支 失败的方法,即在分支指令取指后的下一个周期取下一条指令。当分支指令跳转成功时,流水线就把在分支指令之后取出的所有指令转化为空操作,并按分支目标地址重新取指令执 行。可以看出,执行一个循环需要-15- (-30) =15个周期。在一个循环周期内,指令序列的流水线时空图如下所示:D;WUIF S J;IDLXMswIFSSLW F ID EX MD;WILDOBNEZLW指令 12 3 4 5 6 丁 8 9 也吐 12 13 口衍 16 17 18 19 20 21 22IDEXMWBOFIDEXM卿ID EX M WIF S S JF D EX MFSSIDEXMIFSSS代表R-Stal 1。与WinDLX中运行出的流水线时空图不同之处在于,这里采用的是排 空流水线处理分支指令,即在第15时钟周期,当流水线在ID段检测到分支指令“BNEZ R4, LOOP”后,就暂停执行其后的所有指令,直到分支指令到达MEM段,确定是否分支成功 并计算出新的PC值为止。这里,因为分支成功,所以重新取指令“LW R1, 0(R2)”执行。 由图9可以看出,执行完一个循环需要的时钟周期数为:18 -1 =17.由于R3 =R2 + 396,因此共有396/4 = 99个循环。故执行完整个程序所需要的时钟周期 数为 17X98 + 18 = 1684。2、用WinDLX运行3_4_before.s,配置Configuration菜单中的选项,设定采用定向技术。 程序在一个循环周期内的流水线时空图如下所示:Clock Cycle DiagramInstructions / Cycles-11 , -10 ,-3,-8,-7,-6,-51 1 3 1 1 1 1Iw ir0x0(r2)1 1 1 1 1 1 IF | ID | mtEX | MEM | V/Baddi r1 ,0h1IF | ID |R-Stall| intEX | MEM | WB溯 0x002)/1;IF | Stall | ID |iritEXMEMWB1addiIF |IDmtEXMEM WB11*sub r4j3/2:IFIDintEX | MEMWB1bnez r4rLOOP:IFR-St allIDintEXMEMtrap UmU:|IF| dbortedilw i1,0x0(r2):IF I ID II1B由上述可知WinDLX对分支指令采用的是预测分支失败的方法。且由图10可以看出, 在采用定向的条件下,执行一个循环需要-2- (-11) = 9个周期。在一个循环周期内,指令序列的流水线时空图如下所示:后令1 234 5f;7只31(1 1131415AVIF D:XMWHDADDJUil;inSHXMVVRSV卜SrnHXMWRDADDIUFFH)FXMWRDSUBIFIDE2XMWBBNEZTFTDEXMLVII;Tlihmi、1; DliXM WIJ与WinDLX中运行出的流水线时空图不同之处在于,这里分支指令后没有“TRAP #0”指令。因而在采用预测分支失败的策略处理分支指令的情况下,流水线中继续流水的是“LW Rl, 0(R2)”指令。分支成功后重新取指令“LW Rl, 0(R2)”执行。由图可知,执行完一个循环需要的时钟周期数为:11-1=10。 执行完整个程序所需要的时钟周期数为10X98 + 11 = 991。3、按照题的要求对该循环中的指令进行调度,采用的调度方法为:将独立执行的指令“ADDI R2, R2, #4”前移至“LW R1, 0(R2)”后;将分支指令前的一条指令“SW 0(R2), R1” 修改为“SW -4(R2), R1”,后移至分支指令“BNEZ R4, LOOP”后作为延迟槽中的指令。 调度后程序如下所示:LHI(A16) &0XFFFFR2f R2r AsOXFFFFR3,&0XFFFFR3f R3r B&OXFFFFADDUTL?1IADDUILC-OP:LWRlf0(R2)ADDIR2fR2f 豹ADDIRlfRlf#1SUBRf R3f REENEZ:匚 OOPSW-4(R2)rRlTRAP相A:.WORD亠 8f 12r16r20r2,:m:.WORD将调度后的程序保存为3_4_after.s,导入WinDLX,设定为采用定向技术,运行该程序。个循环周期内,该指令序列的流水线时空图如下所示:Clock Cycle Diagra mIF| ID intEX | MEM | WByIF | ID | intEX : MEM |WE |AIF | ID | intEXMEM | WB |-10 | | -8七 I -5|4IFIDI intEX IMEM I| WB4Sfc.IF | H-Stall | ID | iritEXMEMIF | abortedInstructions / Cycles0(r2Jaddi r2j2,0w4addi r1 jl r0x1suti rr3j2bnez r4,L00Psw 0xfFfc(r2)j1Iwrt0w0(r2)I IF | ID由上图可以看出,在采用预测分支失败的策略处理分支指令时,分支指令“BNEZ R4,LOOP”跳转成功后,停止了其后继指令“SW -4(R2), R1”的执行,直接转向分支目标指 令“LW R1, 0(R2)”处执行。在这种情况下,执行一个循环需要-3- (-10) =7个时钟周期。在一个循环周期内,指令序列的流水线时空图如下所示:指令I 23456rrigg0LWlb IDEXMWBDADDIUFIDEXMWBDADDIbIFIDEXMWBDSUBIFIDLXMWBRNEZIFIDEXMwnSWFif)EXMWBLWIFIDEXMWB与 WinDLX 中运行出的流水线时空图不同之处在于,这里是采用单周期延迟分支的方法处理分支指令的,延迟槽中的指令为“SW -4(R2), R1”。虽然分支能够成功,但是 仍然要把延迟槽指令顺利执行完。可知,执行完一个循环需要的时钟周期数为:7 -1 =6。 执行完整个程序所需要的时钟周期数为6X98 + 11 = 598。4 实验总结:通过本次实验,我对 WinDLX 的流水线运行分析,包括流水线单步执行、每个流水段 功能、流水线建立与排空、定向技术等内容有了很好的掌握;知道其运行情况,能够根据程 序段分析其运行位置及存储情况。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!