当前位置:文档之家› 计算机系统结构实验报告

计算机系统结构实验报告

计算机系统结构实验报告姓名学号指导老师实验一、流水线中的相关一、实验目的1. 掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2. 加深对计算机流水线基本概念的理解;3. 进一步了解DLX基本流水线各段的功能以及基本操作;4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。

二、实验平台WinDLX模拟器。

三、实验内容、步骤及实验结果1.用WinDLX模拟器执行下列三个程序:1>求阶乘程序fact.s2>求最大公倍数程序gcm.s3>求素数程序prim.s分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。

熟练掌握WinDLX的操作和使用。

结果总结:三种方式:步进的方式是按快捷键F7或者选择菜单栏Execute中的Single Cycle;连续的方式是按快捷键F5或者选择Execute中的Run;设置断点是通过选择window菜单栏中的code,然后在菜单栏中多出一项code项,选中你想要插入的指令,在多出来的code项中找到set breakpoint,即可插入断点,然后按F5执行即可。

1.用WinDLX运行fact.sPipeline图指出了每个功能段所进行的具体指令,点击指令还可以看到指令的具体相关的其他方面的内容。

时空图更加直观的形式显示出了在某个时间周期某个功能段所执行的具体的指令。

Register图指出了各个寄存器和存储器的值.Statistics图指出了指令的相关分析数据,例如,执行了53个cycles,2条指令在流水线中等相关的总结信息。

2. 用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。

资源相关的指令:addd f0,f0,f4addd f2,f0,f2(发生先写后读的数据相关导致消除了资源相关)由图可知是因为只有一个faddEX的运算部件,而它需要两个时钟周期,当第一条addd指令执行EX段时,第二条指令势必要等一个周期等faddEX部件空闲了才能够使用。

但是,同时由于这两条指令存在先写后读数据相关,暂停一个周期之后没有了资源相关.单条指令的详细资源冲突图因为Statistics图中的分析数据没有看见structural stall,但是根据图知道这个存在addd f2,f0,f2时的资源冲突,大概循环了6次,总共时钟周期是142个,所以资源相关引起的暂停的时钟周期的个数是6个,暂停时钟周期数占总执行周期数的百分比为6/142= 4.3%Statistics数据分析图资源相关降低CPU性能,并行运算的速度降低,解决资源相关的方法有停顿几个时钟周期法(针对访存冲突和设备资源冲突(轮流单个使用))或者是增加硬件设备(解决设备资源冲突)。

3. 在不采用定向技术的情况下(去掉Configuration菜单中Enable Forwarding选项前的勾选符),用WinDLX运行程序data_d.s。

记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。

在采用定向技术的情况下(勾选Enable Forwarding),用WinDLX再次运行程序data_d.s。

重复上述3中的工作,并计算采用定向技术后性能提高的倍数。

1、不定向技术:总时钟周期=202 数据相关引起的暂停时钟周期=104 暂停时钟周期数占总执行周期数的百分比=51.48%2、定向技术:总时钟周期=128 数据相关引起的暂停时钟周期=30暂停时钟周期数占总执行周期数的百分比=23.44%定向技术的加速比 = 202/128 = 1.578四、心得体会通过使用WinDlX对指令模拟与分析,我们对流水线的执行过程更加熟悉,也对执行时出现的问题,如资源相关,数据相关等产生原因有了清晰的认识,进一步加深了使我们对流水线的理解。

实验二循环展开及指令调度一.实验名称循环展开及指令调度二.实验目的1. 加深对循环级并行性、指令调度技术、循环展开技术以及寄存器换名技术的理解;2. 熟悉用指令调度技术来解决流水线中的数据相关的方法;3. 了解循环展开、指令调度等技术对CPU性能的改进。

三.实验平台WinDLX模拟器四.实验内容和步骤及实验结果1.用指令调度技术解决流水线中的结构相关与数据相关(1)用DLX汇编语言编写代码文件*.s,程序中应包括数据相关与结构相关(假设:加法﹑乘法﹑除法部件各有2个,延迟时间都是3个时钟周期)(2)通过Configuration菜单中的“Floating point stages”选项,把加法﹑乘法﹑除法部件的个数设置为2个,把延迟都设置为3个时钟周期;(3)用WinDLX运行程序。

记录程序执行过程中各种相关发生的次数、发生相关的指令组合,以及程序执行的总时钟周期数;(4)采用指令调度技术对程序进行指令调度,消除相关;(5)用WinDLX运行调度后的程序,观察程序在流水线中的执行情况,记录程序执行的总时钟周期数;(6)根据记录结果,比较调度前和调度后的性能。

论述指令调度对于提高CPU性能的意义。

2. 用循环展开、寄存器换名以及指令调度提高性能(1)用DLX汇编语言编写代码文件*.s,程序中包含一个循环次数为4的整数倍的简单循环;(2)用WinDLX运行该程序。

记录执行过程中各种相关发生的次数以及程序执行的总时钟周期数;(3)将循环展开3次,将4个循环体组成的代码代替原来的循环体,并对程序做相应的修改。

然后对新的循环体进行寄存器换名和指令调度;(4)用WinDLX运行修改后的程序,记录执行过程中各种相关发生的次数以及程序执行的总时钟周期数;(5)根据记录结果,比较循环展开、指令调度前后的性能。

五.实验代码及结果1.用指令调度技术解决流水线中的结构相关与数据相关(一)指令调度前:原始代码:.data.global aa: .float 2.0.text.global mainmain:lf f7,alf f6,aaddf f2,f5,f7addf f1,f2,f6addf f3,f1,f5addf f0,f4,f7divf f14,f0,f6divf f15,f5,f7multf f20,f4,f6multf f21,f5,f7Finish:trap 0(二)实验结果:总计共23周期,有3次数据相关,3次资源相关。

其中:数据相关:1. addf f2,f5,f7addf f1,f2,f6f2引起的RAW相关2. addf f1,f2,f6addf f3,f1,f5f1引起的RAW相关3. addf f0,f4,f7divf f14,f0,f6f0引起的RAW相关资源相关:1. addf f1,f2,f6addf f3,f1,f52. addf f3,f1,f5addf f0,f4,f73. divf f14,f0,f6divf f15,f5,f7(三)指令调度后代码:.data.global aa: .float 2.0.text.global mainmain:lf f7,alf f6,aaddf f2,f5,f7multf f21,f5,f7divf f15,f5,f7addf f1,f2,f6addf f0,f4,f7multf f20,f4,f6addf f3,f1,f5divf f14,f0,f6Finish:trap 0(四)实验结果:共计17个周期,通过指令调度消除了所有数据相关和资源相关。

(五)实验结论:指令调度后,数据相关减少了,总时钟周期数减少了,效能提高了。

调度前的时钟周期数为23,调度后的时钟周期数减少为17,加速比= 23/17= 1.353。

2. 用循环展开、寄存器换名以及指令调度提高性能(一)原始代码.text.global mainmain:addi r1,r0,#4addi r2,r0,#0Loop:sgt r3,r1,r0bnez r3,Sub1trap 0Sub1:addi r2,r2,#1subi r1,r1,#1j Loop(二)实验结果结果:总时钟周期是42个,5 raw stalls,循环了4次,结果r2 = 4(三)循环展开、指令调度、寄存器换名后代码.text.global mainmain:addi r1,r0,#4addi r2,r0,#0addi r2,r2,#1subi r1,r1,#1addi r2,r2,#1subi r1,r1,#1addi r2,r2,#1subi r1,r1,#1addi r2,r2,#1subi r1,r1,#1trap 0(四)实验结果结果:总时钟周期是15个,0 raw stalls,执行了4次,结果r2 = 4(五)实验结论在循环展开后,经过指令调度和寄存器换名,完全消去了资源相关和数据相关,总时钟周期数减少。

调度前的时钟周期数为42,调度后的时钟周期数减少为15,Sp = 42/15=2.8。

实验三Cache性能分析一、实验目的1.加深对Cache的基本概念、基本组织结构以及基本工作原理的理解;2.了解Cache的容量、相联度、块大小对Cache性能的影响;3.掌握降低Cache失效率的各种方法,以及这些方法对Cache性能提高的好处;4.理解Cache失效的产生原因以及Cache的三种失效;5.理解LRU与随机法的基本思想,及它们对Cache性能的影响;二、实验平台SimpleScalar模拟器。

三、实验内容及步骤1.在基本配置情况下运行程序(请指明所选的测试程序),统计Cache总失效次数、三种不同种类的失效次数;配置好了环境之后,用hello.c生成的a.out文件来进行模拟演示。

Cache的总失效次数为458,。

2.改变Cache容量(*2,*4,*8,*64),运行程序(指明所选的测试程序),统计各种失效的次数,并分析Cache容量对Cache性能的影响;3.改变Cache的相联度(1路,2路,4路,8路,64路),运行程序(指明所选的测试程序),统计各种失效的次数,并分析相联度对Cache性能的影响;4.改变Cache块大小(*2,*4,*8,*64),运行程序(指明所选的测试程序),统计各种失效的次数,并分析Cache块大小对Cache性能的影响;5.分别采用LRU与随机法,在不同的Cache容量、不同的相联度下,运行程序(指明所选的测试程序)统计Cache总失效次数,计算失效率。

相关主题