您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 计算机体系结构实验报告
实验一流水线中的相关一.实验目的1.熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2.加深对计算机流水线基本概念的理解;3.进一步了解DLX基本流水线各段的功能以及基本操作;4.加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5.了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。二.实验平台WinDLX模拟器三.预备知识1.WinDLXWinDLX模拟器是一个图形化、交互式的DLX流水线模拟器,能够演示DLX流水线是如何工作的。该模拟器可以装载DLX汇编语言程序(后缀为“.s”的文件),然后单步、设断点或是连续执行该程序。CPU的寄存器、流水线、I/O和存储器都可以用图形表示出来,以形象生动的方式描述DLX流水线的工作过程。模拟器还提供了对流水线操作的统计功能,便于对流水线进行性能分析。有关WinDLX的详细介绍,见WinDLX教程。2.熟悉WinDLX指令集和WinDLX源代码的编写3.复习和掌握教材中相应的内容(1)DLX基本流水线(2)流水线的结构相关与数据相关结构相关:当指令在重叠执行过程中,硬件资源满足不了指令重叠执行的要求,发生资源冲突时,将产生“结构相关”。数据相关:当一条指令需要用到前面指令的执行结果,而这些指令均在流水线中重叠执行时,就可能引起“数据相关”。(3)定向技术的主要思想:在发生数据相关时,等待前面计算结果的指令并不一定真的马上就用到该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令需要它的地方,就可以避免暂停。四.实验内容及结果1.用WinDLX模拟器执行下列三个程序(任选一个):求阶乘程序fact.s求最大公倍数程序gcm.s求素数程序prim.s分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。熟练掌握WinDLX的操作和使用。注意:fact.s中调用了input.s中的输入子程序。load程序时,要两个程序一起装入(都select后再点击load)。gcm.s也是如此。说明:此实验我们选择:求阶乘程序fact.s1)用WinDLX模拟器执行求阶乘程序fact.s。2)程序的作用:这个程序说明浮点指令的使用。该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。3)实验结果:i.分别以步进、连续、设置断点的方式运行程序图1.求阶乘程序fact.s运行统计数据步进方式运行图2求阶乘程序fact.s运行统计数据连续方式运行图3求阶乘程序fact.s运行统计数据连续方式运行ii.数据统计图1.1.4求阶乘程序fact.s运行统计数据图5求阶乘程序fact.s流水线执行情况图6求阶乘程序fact.s寄存器使用情况iii.定向非定向分析在载入fact.s和input.s之后,不设置任何断点运行。A.不采用重新定向技术,我们得到的结果:B.采用定向技术,我们得到的结果:结果分析从上面的数据我们可以看出定向的作用:在定向技术存在的情况下Statistics窗口中的各种统计数字:总的周期数(215)和暂停数(17RAW,25Control,12Trap;54Total)在定向技术不存在时候,控制暂停和Trap暂停仍然是同样的值,而RAW暂停从17变成了53,总的模拟周期数增加到236。所以定向技术带来的加速比:S=236/215=1.098因此:DLXforwarded比DLXnotforwarded快9.8%。2.用WinDLX运行程序structure_d.s,通过模拟:找出存在结构相关的指令对以及导致结构相关的部件;记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述结构相关对CPU性能的影响,讨论解决结构相关的方法。1)模拟结果:图2.1程序structure_d.s流水线执行过程图2.2程序structure_d.s运行统计信息2)结构相关i.如图,导致结构的部件:浮点数寄存器f4adddf0,f0,f4指令在译码阶段ID停滞1周期ii.如图导致结构相关的部件:ALUaddir2,r2,0x8指令在执行阶段intEX停滞1周期3)结果分析4)解决办法3.在不采用定向技术的情况下(去掉Configuration菜单中EnableForwarding选项前的勾选符),用WinDLX运行程序data_d.s。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。1)实验结果:没有采用定向技术时运行该程序,我们得到:由资源相关引起的暂停周期数为:30总执行周期数为:139暂停周期数占总执行周期数的百分比:21.58%分析:资源相关使相关指令在流水线上停滞,降低了执行效率。在合理的指令调度范围内,尽量避免执行重复的指令。尽量避免同一寄存器的频繁使用,若无法避免,则使用寄存器换名的方法。也可以考虑采用资源重复的方法,比如,在流水线机器中设置相互独立的指令存储器和数据存储器,也可以将CACHE分割成指令CACHE和数据CACHE。2)结果分析:4.在采用定向技术的情况下(勾选EnableForwarding),用WinDLX再次运行程序data_d.s。重复上述3中的工作,并计算采用定向技术后性能提高的倍数。1)实验结果:采用定向技术时运行该程序,我们得到:2)结果分析:五.总结实验二循环展开及指令调度一.实验目的1.加深对循环级并行性、指令调度技术、循环展开技术以及寄存器换名技术的理解;2.熟悉用指令调度技术来解决流水线中的数据相关的方法;3.了解循环展开、指令调度等技术对CPU性能的改进。二.实验平台WinDLXsimulator四.预备知识程序执行了128个周期,共有6个数据相关引起的时钟周期RAWstall为30个。暂停时钟周期数占总执行周期数的百分比=23.44%程序执行了202个周期,10个数据相关引起的时钟周期RAWstall为104个。暂停时钟周期数占总执行周期数的百分比=51.48%1.WinDLX模拟器的相关知识,详见相关的文档。2.复习和掌握教材中相应的内容:(1)循环级并行性(2)指令调度(3)循环展开(4)寄存器换名五.实验内容及结果1.用指令调度技术解决流水线中的结构相关与数据相关(1)用DLX汇编语言编写代码文件*.s,程序中应包括数据相关与结构相关(假设:加法﹑乘法﹑除法部件各有2个,延迟时间都是3个时钟周期)给出调度前的程序sch_bef:(2)通过Configuration菜单中的“Floatingpointstages”选项,把加法﹑乘法﹑除法部件的个数设置为2个,把延迟都设置为3个时钟周期;.data.globalONEONE:.word1.text.globalmainmain:lff1,ONE;turndivfintoamovecvti2ff7,f1;bystoringinf71innop;floating-pointformatdivff1,f8,f7;moveY=(f8)intof1divff2,f9,f7;moveZ=(f9)intof2addff3,f1,f2divff10,f3,f7;movef3intoX=(f10)divff4,f11,f7;moveB=(f11)intof4divff5,f12,f7;moveC=(f12)intof5multff6,f4,f5divff13,f6,f7;movef6intoA=(f13)Finish:trap0(3)用WinDLX运行程序。记录程序执行过程中各种相关发生的次数、发生相关的指令组合,以及程序执行的总时钟周期数;(4)采用指令调度技术对程序进行指令调度,消除相关;调度之后的程序sch_aft:.data.globalONEONE:.word1.text.globalmainmain:lff1,ONE;turndivfintoamovecvti2ff7,f1;bystoringinf71innop;floating-pointformatdivff1,f8,f7;moveY=(f8)intof1divff2,f9,f7;moveZ=(f9)intof2divff4,f11,f7;moveB=(f11)intof4divff5,f12,f7;moveC=(f12)intof5addff3,f1,f2multff6,f4,f5divff10,f3,f7;movef3intoX=(f10)divff13,f6,f7;movef6intoA=(f13)divff10,f3,f7;movef3intoX=(f10)divff13,f6,f7;movef6intoA=(f13)Finish:trap0(5)用WinDLX运行调度后的程序,观察程序在流水线中的执行情况,记录程序执行的总时钟周期数;(6)根据记录结果,比较调度前和调度后的性能。论述指令调度对于提高CPU性能的意义。意义:可以看出经过调度之后运行周期从27减少到21,而且减少了相关。2.用循环展开、寄存器换名以及指令调度提高性能(1)用DLX汇编语言编写代码文件*.s,程序中包含一个循环次数为4的整数倍的简单循环;循环展开前的程序:(2)用WinDLX运行该程序。记录执行过程中各种相关发生的次数以及程序执行的总时钟周期数;LHIR2,(A16)&0xFFFFADDUIR2,R2,A&0xFFFFLHIR3,(B16)&0xFFFFADDUIR3,R3,B&0xFFFFADDUR4,R0,R3NOPloop:SUBIR4,R4,#8SUBR5,R4,R2BNEZR5,loopTRAP#0A:.double1,2,3,4B:.double1,2,3,4(3)将循环展开3次,将4个循环体组成的代码代替原来的循环体,并对程序做相应的修改。然后对新的循环体进行寄存器换名和指令调度;循环展开后的程序:(4)用WinDLX运行修改后的程序,记录执行过程中各种相关发生的次数以及程序执行的总时钟周期数;LHIR2,(A16)&0xFFFFADDUIR2,R2,A&0xFFFFLHIR3,(B16)&0xFFFFADDUIR3,R3,B&0xFFFFADDUR4,R0,R3SUBIR4,R4,#8SUBIR4,R4,#8SUBIR4,R4,#8SUBIR4,R4,#8TRAP#0A:.double1,2,3,4B:.double1,2,3,4(5)根据记录结果,比较循环展开、指令调度前后的性能。结论:可以看出经过循环展开之后运行周期从30减少到14,而且减少了相关。五.总结实验三记分牌算法和Tomasulo算法一.实验目的1.掌握DLXview模拟器的使用方法;2.进一步理解指令动态调度的基本思想,了解指令动态调度的基本过程与方法;3.理解记分牌算法和Tomasulo算法的基本思想,了解它们的基本结构、运行过程;4.比较分析基本流水线与记分牌算法和Tomasulo算法的性能及优缺点。二.实验平台DLXview模拟器三.预备知识1.DLXview模拟器2.复习和掌握教材中相应的内容1)指令的动态调度2)乱序流水线3)为了允许乱序执行,我们将基本流水线的译码阶段再分为两个阶段:4)记分牌技术的目标:在资源充足时,尽可能早地执行没有数据阻塞的指令,达到每个时钟周期执行一条指令。5)Tomasulo算法将记分牌的关键部分和寄存器换名技术结合在一起,其基本核心是通过寄存器换名来消除写后写和先读后写相关可能引发的流水线阻塞。6)Tomasulo算法的基本思想四.实验内容及结果1.用DLX汇编语言编写代码文件*.s(程序中应包括指令的数据相关、控制相关以及结构相关),以及相关的初始化寄存器文件*.i和数据文件*.d;305.s305.i2.观察程序中出现的数据相关、控制相关、结构相关,并指出三种相关的指令组合;(1)第二个lf指令到multf、subf和addf,multf到divf之间
本文标题:计算机体系结构实验报告
链接地址:https://www.777doc.com/doc-5250331 .html