《计算机体系结构实验报告》由会员分享,可在线阅读,更多相关《计算机体系结构实验报告(27页珍藏版)》请在金锄头文库上搜索。
1、实验一 流水线中的相关一实验目的一实验目的1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2. 加深对电脑流水线基本概念的理解;3. 进一步了解DLX基本流水线各段的功能以及基本操作;4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。二实验平台二实验平台WinDLX模拟器三预备知识预备知识1. WinDLXWinDLX模拟器是一个图形化、交互式的DLX流水线模拟器,能够演示DLX流水线是如何工作的。该模拟器可以装载DLX汇编语言程序后缀为“ .s”的文件 ,然后单步、设
2、断点或是连续执行该程序。CPU的寄存器、流水线、I/O和存储器都可以用图形表示出来,以形象生动的方式描述DLX流水线的工作过程。模拟器还提供了对流水线操作的统计功能,便于对流水线进行性能分析。有关WinDLX的详细介绍,见WinDLX教程。2. 熟悉WinDLX指令集和WinDLX源代码的编写3. 复习和掌握教材中相应的内容1DLX基本流水线2流水线的结构相关与数据相关结构相关:当指令在重叠执行过程中,硬件资源满足不了指令重叠执行的要求,发生资源冲突时,将产生“结构相关” 。数据相关:当一条指令需要用到前面指令的执行结果,而这些指令均在流水线中重叠执行时,就可能引起“数据相关” 。3定向技术的
3、主要思想:在发生数据相关时,等待前面计算结果的指令并不一定真的马上就用到该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令需要它的地方,就可以防止暂停。四实验内容及结果四实验内容及结果1.1. 用用 WinDLX WinDLX 模拟器执行以下三个程序任选一个模拟器执行以下三个程序任选一个 :分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察观察CPUCPU 中寄存器和存储器的内容。熟练掌握中寄存器和存储器的内容。熟练掌握WinDLXWinDLX 的操作和使用。的操作和使用。注意:fac
4、t.s 中调用了input.s 中的输入子程序。load 程序时,要两个程序一起装入都select 后再点击load 。gcm.s 也是如此。说明:此实验我们选择:求阶乘程序说明:此实验我们选择:求阶乘程序1用 WinDLX模拟器执行求阶乘程序 。2程序的作用:这个程序说明浮点指令的使用。该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。该程序中调用了中的输入子程序,这个子程序用于读入正 整数。3实验结果:i . 分别以步进、连续、设置断点的方式运行程序ii. 数据统计iii. 定向非定向分析在载入 fact.s 和 input.s 之后,不设置任何断点运行。A. 不采用重新定向技术,我
5、们得到的结果:B. 采用定向技术,我们得到的结果:结果分析从上面的数据我们可以看出定向的作用:在定向技术存在的情况下 Statistics 窗口中的各种统计数字:总的周期数(215) 和暂停数 (17 RAW, 25 Control, 12 Trap; 54 Total)在定向技术不存在时候, 控制暂停和 Trap 暂停仍然是同样的值, 而 RAW暂停从 17变成了 53,总的模拟周期数增加到236。所以定向技术带来的加速比:S=236 / 215 = 1.098因此:DLXforwarded比 DLXnot forwarded快 9.8%。2. 2. 用用 WinDLXWinDLX 运行程序
6、,通过模拟:运行程序,通过模拟:找出存在结构相关的指令对以及导致结构相关的部件;找出存在结构相关的指令对以及导致结构相关的部件;记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;分比;论述结构相关对论述结构相关对 CPUCPU 性能的影响,讨论解决结构相关的方法。性能的影响,讨论解决结构相关的方法。1模拟结果:图 程序流水线执行过程图程序运行统计信息2结构相关i. 如图,导致结构的部件:浮点数寄存器f4addd f0,f0,f4 指令在译码阶段 ID 停滞 1 周期ii. 如图导致结构相关的部件
7、: ALUaddi r2,r2,0x8 指令在执行阶段 intEX 停滞 1 周期3结果分析由资源相关引起的暂停周期数为:30总执行周期数为:139暂停周期数占总执行周期数的百分比:21.58%分析:资源相关使相关指令在流水线上停滞,降低了执行效率。4解决方法在合理的指令调度范围内,尽量防止执行重复的指令。尽量防止同一寄存器的频繁使用,假设无法防止,则使用寄存器换名的方法。 也可以考虑采用资源重复的方法,比方, 在流水线机器中设置相互独立的指令存储器和数据存储器, 也可以将 CACHE分割成指令 CACHE 和数据 CACHE。3. 3. 在不采用定向技术的情况下去掉在不采用定向技术的情况下去
8、掉 ConfigurationConfiguration 菜单中菜单中 Enable ForwardingEnable Forwarding 选项前的选项前的勾选符勾选符 ,用,用 WinDLXWinDLX 运行程序。记录数据相关引起的暂停时钟周期数以及程序执行的总运行程序。记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。1实验结果:没有采用定向技术时运行该程序,我们得到:2结果分析:程序执行了 202 个周期,10 个数据相关引起的时钟周期RAW stall为 104 个。暂停时钟周期
9、数占总执行周期数的百分比=51.48%4. 在采用定向技术的情况下勾选Enable Forwarding ,用 WinDLX 再次运行程序。重复上述 3 中的工作,并计算采用定向技术后性能提高的倍数。1实验结果:采用定向技术时运行该程序,我们得到:2结果分析:程序执行了 128 个周期, 共有 6 个数据相关引起的时钟周期RAW stall为 30 个。 暂停时钟周期数占总执行周期数的百分比=23.44%五总结五总结实验二 循环展开及指令调度一实验目的一实验目的1.加深对循环级并行性、指令调度技术、循环展开技术以及寄存器换名技术的理解;2.熟悉用指令调度技术来解决流水线中的数据相关的方法;3.
10、了解循环展开、指令调度等技术对 CPU 性能的改良。二实验平台二实验平台WinDLX simulator四预备知识预备知识1. WinDLX模拟器的相关知识,详见相关的文档。2. 复习和掌握教材中相应的内容:1 循环级并行性2 指令调度3 循环展开4 寄存器换名五实验内容及结果五实验内容及结果1 1用指令调度技术解决流水线中的结构相关与数据相关用指令调度技术解决流水线中的结构相关与数据相关1用DLX汇编语言编写代码文件*.s,程序中应包括数据相关与结构相关假设:加法乘法除法部件各有2个,延迟时间都是3个时钟周期给出调度前的程序sch_bef:.data.global ONEONE: .word
11、 1.text.global mainmain:lf f1,ONE ;turn divf into a movecvti2f f7,f1 ;by storing in f7 1 innop ;floating-point formatdivf f1,f8,f7 ;move Y=(f8) into f1divf f2,f9,f7 ;move Z=(f9) into f2addf f3,f1,f2divf f10,f3,f7 ;move f3 into X=(f10)divf f4,f11,f7 ;move B=(f11) into f4divf f5,f12,f7 ;move C=(f12) i
12、nto f5multf f6,f4,f5divf f13,f6,f7 ;move f6 into A=(f13)Finish:trap 0(2)通过ConfigurationConfiguration菜单中的“Floating point stagesFloating point stages” 选项,把加法乘法除法部件的个数设置为2个,把延迟都设置为3个时钟周期;(3)用WinDLX运行程序。记录程序执行过程中各种相关发生的次数、发生相关的指令组合,以及程序执行的总时钟周期数;(4)采用指令调度技术对程序进行指令调度,消除相关;调度之后的程序 sch_aft:.data.global ONE
13、ONE: .word 1.text.global mainmain:lf f1,ONE ;turn divf into a movecvti2f f7,f1 ;by storing in f7 1 innop ;floating-point formatdivf f1,f8,f7 ;move Y=(f8) into f1divf f2,f9,f7 ;move Z=(f9) into f2divf f4,f11,f7 ;move B=(f11) into f4divf f5,f12,f7 ;move C=(f12) into f5addf f3,f1,f2multf f6,f4,f5divf f
14、10,f3,f7 ;move f3 into X=(f10)divf f13,f6,f7 ;move f6 into A=(f13)Finish:trap 0(5)用WinDLX运行调度后的程序,观察程序在流水线中的执行情况,记录程序执行的总时钟周期数;(6)根据记录结果, 比较调度前和调度后的性能。 论述指令调度对于提高CPU性能的意义。意义:可以看出经过调度之后运行周期从27 减少到 21,而且减少了相关。2.2. 用循环展开、寄存器换名以及指令调度提高性能用循环展开、寄存器换名以及指令调度提高性能1用DLX汇编语言编写代码文件*.s,程序中包含一个循环次数为4的整数倍的简单循环;循环展开
15、前的程序:LHIR2, (A16)&0xFFFFADDUIR2, R2, A&0xFFFFLHIR3, (B16)&0xFFFFADDUIR3, R3, B&0xFFFFADDUR4, R0, R3NOPloop:SUBIR4, R4, #8SUBR5, R4, R2BNEZR5, loopTRAP#0A:.double 1, 2, 3, 4B:.double 1, 2, 3, 4(2)用WinDLX运行该程序。记录执行过程中各种相关发生的次数以及程序执行的总时钟周期数;(3)将循环展开3次, 将4个循环体组成的代码代替原来的循环体, 并对程序做相应的修改。然后对新的循环体进行寄存器换名和指令
16、调度;循环展开后的程序:LHI R2, (A16)&0xFFFF ADDUI R2, R2, A&0xFFFF LHI R3, (B16)&0xFFFF ADDUI R3, R3, B&0xFFFF ADDU R4, R0, R3 SUBI R4, R4, #8 SUBI R4, R4, #8 SUBI R4, R4, #8 SUBI R4, R4, #8 TRAP #0 A: .double 1, 2, 3, 4 B: .double 1, 2, 3, 4(4)用WinDLX运行修改后的程序,记录执行过程中各种相关发生的次数以及程序执行的总时钟周期数;(5)根据记录结果,比较循环展开、指令调
17、度前后的性能。结论:可以看出经过循环展开之后运行周期从30 减少到 14,而且减少了相关。五总结五总结实验三 记分牌算法和Tomasulo 算法一实验目的一实验目的1. 掌握DLXview 模拟器的使用方法;2. 进一步理解指令动态调度的基本思想,了解指令动态调度的基本过程与方法;3. 理解记分牌算法和Tomasulo 算法的基本思想,了解它们的基本结构、运行过程;4. 比较分析基本流水线与记分牌算法和Tomasulo 算法的性能及优缺点。二实验平台二实验平台DLXview 模拟器三预备知识三预备知识1. DLXview 模拟器2. 复习和掌握教材中相应的内容1指令的动态调度2乱序流水线3为了
18、允许乱序执行,我们将基本流水线的译码阶段再分为两个阶段:4记分牌技术的目标:在资源充足时,尽可能早地执行没有数据阻塞的指令,到达每个时钟周期执行一条指令。5Tomasulo 算法将记分牌的关键部分和寄存器换名技术结合在一起,其基本核心是通过寄存器换名来消除写后写和先读后写相关可能引发的流水线阻塞。6Tomasulo 算法的基本思想四实验内容及结果四实验内容及结果1. 用 DLX 汇编语言编写代码文件*.s 程序中应包括指令的数据相关、 控制相关以及结构相关 ,以及相关的初始化寄存器文件*.i 和数据文件*.d;lff6, 34(r2)#put 30 into r2 -lff2, 45(r3)#
19、34(r2) is 64 (0x40)multff0, f2, f4put r230subff8, f6, f2divff10,f0, f6addff6, f8, f2#put 2.5 into address 0x40trap #0#put 23 into r3 -#45(r3) is 68 (0x41)put r323#put 4.0 into address 68#put 1.25 into FP register f42. 观察程序中出现的数据相关、控制相关、结构相关,并指出三种相关的指令组合;(1) 第二个 lf 指令到 multf、subf 和 addf,multf 到 divf
20、之间,subf 到 addf 之间存在着先写后读相关。(2) divf 和 addf 之间存在着先读后写相关。(3) addf 和 subf 指令关于浮点加法部件还存在着结构相关。3. 将自己编写的程序*.s、*.i、*.d 装载到 DLXview 模拟器上,(1)分别用基本流水线、记分牌算法和Tomasulo算法模拟,针对每一种模拟做如下分析:基本流水线:1统计程序的执行周期数和流水线中的暂停时钟周期数1 个加法部件,延迟周期为22 个乘法部件,延迟周期为101 个除法部件,延迟周期为40程序执行时钟周期数 67,流水线中的暂停时钟周期10 改变功能部件数目重新模拟,观察并记录性能的改变2
21、个加法部件,延迟周期为23 个乘法部件,延迟周期为102 个除法部件,延迟周期为40程序执行时钟周期数 67,流水线中的暂停时钟周期10 改变功能部件延迟重新模拟,观察并记录性能的改变1 个加法部件,延迟周期为12 个乘法部件,延迟周期为81 个除法部件,延迟周期为32程序执行时钟周期数 47,流水线中的暂停时钟周期8由此可见增加功能部件数目之后,性能并没有提高减少功能部件延迟之后,性能得到了显著的提高。记分牌算法:1统计程序的执行周期数和流水线中的暂停时钟周期数1 个加法部件,延迟周期为22 个乘法部件,延迟周期为101 个除法部件,延迟周期为40程序执行时钟周期数 59,流水线中的暂停时钟
22、周期12 改变功能部件数目重新模拟,观察并记录性能的改变2 个加法部件,延迟周期为23 个乘法部件,延迟周期为102 个除法部件,延迟周期为40程序执行时钟周期数 59,流水线中的暂停时钟周期12 改变功能部件延迟重新模拟,观察并记录性能的改变1 个加法部件,延迟周期为12 个乘法部件,延迟周期为81 个除法部件,延迟周期为32程序执行时钟周期数 49,流水线中的暂停时钟周期10由此可见增加功能部件数目之后,性能并没有提高减少功能部件延迟之后,性能得到了显著的提高。Tomasulo算法:1统计程序的执行周期数和流水线中的暂停时钟周期数1 个加法部件,延迟周期为22 个乘法部件,延迟周期为101
23、 个除法部件,延迟周期为40程序执行时钟周期数 56,流水线中的暂停时钟周期10 改变功能部件数目重新模拟,观察并记录性能的改变2 个加法部件,延迟周期为23 个乘法部件,延迟周期为102 个除法部件,延迟周期为40程序执行时钟周期数 56,流水线中的暂停时钟周期10 改变功能部件延迟重新模拟,观察并记录性能的改变1 个加法部件,延迟周期为12 个乘法部件,延迟周期为81 个除法部件,延迟周期为32程序执行时钟周期数 46,流水线中的暂停时钟周期8由此可见增加功能部件数目之后,性能并没有提高减少功能部件延迟之后,性能得到了显著的提高。(2)记录运行记分牌算法时的功能部件状态表和指令状态表;(3
24、)记录运行 Tomasulo算法时的指令状态表和保留站信息;实验四 Cache 性能分析一实验目的一实验目的1. 加深对 Cache 的基本概念、基本组织结构以及基本工作原理的理解;2. 掌握 Cache 容量、相联度、块大小对Cache 性能的影响;3. 掌握降低 Cache 不命中率的各种方法以及这些方法对提高Cache 性能的好处;4. 理解 LRU 与随机法的基本思想以及它们对Cache 性能的影响。二实验平台二实验平台Cache 模拟器MyCache三预备知识三预备知识MyCache 模拟器使用方法1. 启动模拟器:用鼠标双击。2. 系统会打开一个操作界面。该界面的左边为设置模拟参数
25、区域,右边为模拟结果显示区域。如图 1 所示。3. 可以设置的参数包括:是统一Cache 还是别离Cache,Cache 的容量,块大小,相联度,替换算法,预取策略,写策略,写不命中时的调块策略。可以直接从列表里选择。4. 访问地址可以选择来自地址流文件,也可以选择手动输入。如果是前者,则可以通过点击“浏览”按钮,从模拟器所在文件夹下面的“地址流”文件夹中选取地址流文件 .din 文件 ,然后进行执行。执行的方式可以是步进,也可以是一次执行到底。如果选择手动输入,就可以在“执行控制”区域中输入块地址,然后点击“访问”按钮。系统会在界面的右边显示访问类型、地址、块号以及块内地址。5. 模拟结果包
26、括:1访问总次数,总的不命中次数,总的不命中率;2读指令操作的次数,其不命中次数及其不命中率;3读数据操作的次数,其不命中次数及其不命中率;4写数据操作的次数,其不命中次数及其不命中率;5手动输入单次访问的相关信息。图 1 MyCache 模拟器的操作界面示意图四实验内容及结果四实验内容及结果1. Cache1. Cache 容量对不命中率的影响容量对不命中率的影响 1启动 MyCache。 2用鼠标点击“复位”按钮,把各参数设置为默认值。 3选择一个地址流文件。 方法:选择“访问地址”下的“地址流文件” 选项,然后点击“浏览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 4选择不
27、同的 Cache 容量,包括:2KB,4KB,8KB,16KB,32KB,64KB,128KB,256KB,分别执行模拟器点击“执行到底”按钮 ,然后在表 1 中记录各种情况下的不命中率。表 1 不同容量下 Cache 的不命中率Cache容量kb不命中率24816326412825614.22%10.46%7.59%4.78%2.84%1.97%1.26%0.98% 5以容量为横坐标,画出不命中率随 Cache 容量变化而变化的曲线。并指明地址流文件名。 6 根据该模拟结果,你能得出什么结论?结论:在其他变量一定的情况下,随着Cache 容量的变大不命中率逐渐减小最后趋于稳定。2.2. 相联
28、度对不命中率的影响相联度对不命中率的影响 1 用鼠标点击“复位”按钮,把各参数设置为默认值。这时的 Cache 容量为 64KB。 2 选择一个地址流文件。方法:选择“访问地址”下的“地址流文件”选项,然后点击“浏览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 3 选择不同的 Cache 相联度,包括:直接映象,2 路,4 路,8 路,16 路,32 路,分别执行模拟器点击“执行到底”按钮 ,然后在表 2 中记录各种情况下的不命中率。 a.部分截图:表 2 当容量为 64KB 时,不同相联度下 Cache 的不命中率相联度不命中率11.97%21.15%40.99%80.93%1
29、60.92%320.91%4) 把 Cache 的容量设置为 256KB,重复上一步的工作。表 3 当容量为 256KB 时,不同相联度下 Cache 的不命中率相联度不命中率10.98%20.78%40.74%地址流文件名: 5) 以相联度为横坐标,画出在64KB 和256KB 的情况下不命中率随Cache 相联度变化而变化的曲线。并指明地址流文件名。80.73%160.71%320.71%6. 根据该模拟结果,你能得出什么结论?结论:当 cache 容量一定时,不命中率先是随着相联度地增加而减小的的, 但增加到一定程度后,不命中率不会再降低。当相联度相同,相联度较小时, cache 容量越
30、大不命中率就越低,但当相联度到达一定程度时,再增大cache 容量就没有任何意义。3. Cache3. Cache 块大小对不命中率的影响块大小对不命中率的影响 1) 用鼠标点击“复位”按钮,把各参数设置为默认值。 2) 选择一个地址流文件。 方法:选择“访问地址” 下的“地址流文件” 选项,然后点击“浏览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 3) 选择不同的 Cache 块大小,包括:16B,32B,64B,128B,256B,对于 Cache 的各种容量,包括:2KB,8KB,32KB,128KB,512KB,分别执行模拟器点击“执行到底”按钮 ,然后在表 4 中记录
31、各种情况下的不命中率。 a.部分截图:表 4 各种块大小情况下 Cache 的不命中率块大小B)16326412825627.80%4.0%Cache 容量KB8321287.40%7.20%7.20%5%5127.20%地址流文件名: 4) 分析 Cache 块大小对不命中率的影响。结论:在 Cache 容量不变的情况下,Cache 块越大不命中率越小,最后趋于平缓。4.4. 替换算法对不命中率的影响替换算法对不命中率的影响 1) 用鼠标点击“复位”按钮,把各参数设置为默认值。 2)选择一个地址流文件。方法:选择 “访问地址”下的“地址流文件”选项,然后点击 “浏览”按钮,从本模拟器所在的文
32、件夹下的“地址流”文件夹中选取。 3) 对于不同的替换算法、 Cache 容量和相联度, 分别执行模拟器 点击 “执行到底” 按钮 ,然后在表 5 中记录各种情况下的不命中率。 a.部分截图:cache 容量:16KB相联度:2 路采用 LRU 算法cache 容量:16KB相联度:2 路采用随机算法表 5 LRU 和随机替换法的不命中率的比较cache 容量16K64K256K1M2 路LRU随机算法3.62%4.50%1.15%1.47%0.78%0.83%0.71%0.71%相连度4 路LRU随机算法2.96%4.71%0.99%1.36%0.74%0.76%0.70%0.70%8 路L
33、RU随机算法2.74%5.43%0.93%1.42%0.73%0.72%0.70%0.70%地址流文件名: 4) 分析不同的替换算法对 Cache 不命中率的影响。结论:i.LRU和随机算法的不命中率随着相联度的增加而减少且随着 cache容量的增加而减少; ii.在相联度相同,cache容量相同时,使用LRU替换算法的不命中率比随机算法的不命中率小; iii.当cache容量增大到一定程度, 相联度到达一定程度时, 不命中率不会再降低,且与算法的选择关系不大。5.5. 混合混合 CacheCache 和别离和别离 CacheCache 的比较的比较 1) 用鼠标点击“复位”按钮,把各参数设置
34、为默认值。 2) 选择一个地址流文件。 方法:选择“访问地址” 下的“地址流文件” 选项,然后点击“浏览”按钮,从本模拟器所在的文件夹下的“地址流”文件夹中选取。 3) 分别在别离 Cache 和混合 Cache 的情况下, 选择不同的 Cache 容量, 包括: 4KB, 8KB,16KB,32KB,64KB,128KB,256KB,分别执行模拟器点击“执行到底”按钮 ,然后在表 6 中记录各种情况下的不命中率。 a.部分截图:Cache 容量:4KB混合 CacheCache 容量:4KB别离 Cache表 6 别离 Cache 和混合 Cache 不命中率的比较容量48163264128256指令 cache5.53%5.53%5.53%5.53%5.53%5.53%5.53%数据 cache7.06%7.06%6.29%5.86%5.86%5.86%5.86%混合 cache5.40%5.00%4.70%4.70%4.70%4.70%4.70%地址流文件名: 4) 对模拟结果进行分析。结论:别离 Cache 较混合 Cache 的不命中率较低,这是因为混合Cache 按流水的方式执行load 指令和 store 指令时,可能会同时请求一个数据字和一个指令字,这时会出现结构冲突,导致 CPU 等待。五总结