当前位置:文档之家› 计算机系统结构 实验报告 (截图 分析 总结)

计算机系统结构 实验报告 (截图 分析 总结)

实验一流水线中的相关一、实验目的1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2. 加深对计算机流水线基本概念的理解;3. 进一步了解DLX基本流水线各段的功能以及基本操作;4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停二、实验平台WinDLX 模拟器三、实验内容和步骤1.用WinDLX模拟器执行下列三个程序:(分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。

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

)●求阶乘程序fact.s⏹步进的运行方式:步进的运行方式是指,每次控制只执行一条语句,快捷键为F7键:图1-1 单步运行测试⏹设置断点的运行方式:鼠标点击某行,按下“Insert键”,设置断点:图1-2 设置断点图1-3 断点设置成功,按F5运行至断点⏹连续的运行方式:通过按下F5键,可直接运行至断点处;按下F8键,并在对话框内键入跳跃的步数,可以直接跳转指定的步数:图1-4 设置跳转步数●求最大公倍数程序gcm.s,观察程序在流水线中的执行情况:●求素数程序prim.s,观察CPU 中寄存器和存储器的内容2. 用WinDLX运行程序structure_d.s通过模拟找出存在资源相关的指令对以及导致资源相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。

●存在资源相关的指令、导致资源相关的部件⏹两条指令同时访问寄存器f4,造成资源相关:⏹两条指令同时访问ALU,造成资源相关:●由资源相关引起的暂停时钟周期数、暂停时钟周期数占总执行周期数的百分比由资源相关引起的暂停时钟周期数:30;总执行周期数:139;暂停时钟周期数占总执行周期数的百分比:21.6%3. 在采用、以及不采用定向技术的情况下,分别用WinDLX 运行程序data_d.s(记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;并计算采用定向技术后性能提高的倍数)●采用定向技术:(左下图)⏹计算暂停时钟周期数占总执行周期数的百分比:30/128=23.4%图3-1 采用定向技术图3-2 不采用定向技术●不采用定向技术:(右上图)⏹计算暂停时钟周期数占总执行周期数的百分比:104/202=51.5%●采用定向技术后性能提高的倍数:202/128=1.58倍四、实验总结●资源相关对CPU性能的影响、讨论解决资源相关的方法资源相关使相关指令在流水线上停滞,降低了执行效率;为解决这一问题,应在编写代码时尽量避免总是使用同一寄存器;并通过指令调度,使相关的代码执行距离拉开。

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

二、实验平台WinDLX模拟器三、实验内容及步骤(1)用DLX汇编语言编写代码文件*.s,程序中应包括数据相关与结构相关(假设:加法﹑乘法﹑除法部件各有2个,延迟时间都是3个时钟周期).data.global ONEONE: .word 1.text.global mainmain:lf f1,ONEcvti2f f7,f1 ;结构相关nopnopsubf f1,f8,f7subf f2,f1,f7subf f13,f2,f7addf f6,f4,f5 ;store a new value in r1subf f10,f6,f9 ;use r1 & store new r4addi r12,r12,#1subi r11,r11,#8Finish:trap 0(2)通过Configuration菜单中的“Floating point stages”选项,把加法﹑乘法﹑除法部件的个数设置为2个,把延迟都设置为3个时钟周期;(3)用WinDLX运行程序。

记录程序执行过程中各种相关发生的次数、发生相关的指令组合,以及程序执行的总时钟周期数;●总时钟周期数:24;资源相关数目:1;数据相关数目:6;Trap暂停数目:4●资源相关的指令组合:lf f1,ONEcvti2f f7,f1●数据相关的指令组合:subf f1,f8,f7subf f2,f1,f7subf f13,f2,f7addf f6,f4,f5 ;store a new value in r1subf f10,f6,f9 ;use r1 & store new r4(4)采用指令调度技术对程序进行指令调度,消除相关;.data.global ONEONE: .word 1.text.global mainmain:lf f1,ONEcvti2f f7,f1 ;结构相关nopnopaddf f6,f4,f5 ;--1.1subf f10,f6,f9 ;--1.2addi r12,r12,#1 ;--2.1subi r11,r11,#8 ;--2.2Finish:trap 0(5)用WinDLX运行调度后的程序,观察程序在流水线中的执行情况,记录程序执行的总时钟周期数;图2-1 程序在流水线中的执行情况(6)根据记录结果,比较调度前和调度后的性能。

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

如下图所示,经过调度后,由于上一条指令还没有完成计算结果而导致的数据相关有明显改善;性能提升了24/19=1.263倍图2-2 调度前记录结果图2-3 调度后记录结果2. 循环展开、寄存器换名以及指令调度提高性能(1)用DLX汇编语言编写代码文件*.s,程序中包含一个循环次数为4的整数倍的简单循环;.text.global mainmain:addi r1,r0,#4addi r2,r0,#0Loop:sle r3,r1,r0bnez r3,Endit1addi r2,r2,#1subi r1,r1,#1j LoopEndit1:trap 0(2)用WinDLX运行该程序。

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

然后对新的循环体进行寄存器换名和指令调度;.text.global mainmain:addi r1,r0,#4addi r2,r0,#0Loop:sle r3,r1,r0bnez r3,Endit1addi r2,r2,#1subi r1,r1,#1addi r2,r2,#1subi r1,r1,#1addi r2,r2,#1subi r1,r1,#1addi r2,r2,#1subi r1,r1,#1j LoopEndit1:trap 0(4)用WinDLX运行修改后的程序,记录执行过程中各种相关发生的次数以及程序执行的总时钟周期数;比较循环展开、指令调度前后的性能。

总时钟周期数:15;Trap暂停:3在采用循环展开、指令调度技术前,总时钟周期数为38,而今为15,提升了2.53倍;且经过循环展开,消除了全部的Raw Stalls。

四、实验总结根据实验结果,在采用循环展开、指令调度技术前,总时钟周期数为38,采用循环展开、指令调度技术后,总时钟周期数为15,提升了2.53倍;且经过循环展开,消除了全部的Raw Stalls。

可见循环展开和指令调度技术对于提升CPU性能有重要的作用。

实验三cache性能分析一、实验目的1.加深对Cache的基本概念、基本组织结构以及基本工作原理的理解;2.了解Cache的容量、相联度、块大小对Cache性能的影响;3.掌握降低Cache失效率的各种方法,以及这些方法对Cache性能提高的好处;4.理解Cache失效的产生原因以及Cache的三种失效;5.理解LRU与随机法的基本思想,及它们对Cache性能的影响;二、实验内容及步骤:(测试程序:●Benchmark/ bin.little:anagram●Benchmark/ bin.little:test_math●Benchmark/ gcc2000.v3:art00.O2unroll.gcc.100M.ss●Benchmark/ supplied:mcf00.O2unroll.gcc.100M.ss)1.在基本配置情况下运行程序(请指明所选的测试程序),统计Cache总失效次数、三种不同种类的失效次数;●Anagram的运行结果部分截图:总失效次数:461;容量失效+冲突失效:205;强制性失效:461-205=256●Test_math的运行结果部分截图:总失效次数:804;容量失效+冲突失效:548;强制性失效:804-548=256●art00.O2unroll.gcc.100M.ss的运行结果部分截图:总失效次数:466;容量失效+冲突失效:210;强制性失效:466-210=256●mcf00.O2unroll.gcc.100M.ss的运行结果部分截图:总失效次数:451;容量失效+冲突失效:195;强制性失效:451-195=2562.改变Cache容量(*2,*4,*8,*64),运行程序(指明所选的测试程序),统计各种失效的次数,并分析Cache容量对Cache性能的影响;●Anagram的运行结果部分截图:(*2)# ./simplesim-3.0/sim-cache –cache:dl1 dl1:512:32:1:l anagram总失效次数:451;容量失效+冲突失效:43;强制性失效:451-43=408●mcf00.O2unroll.gcc.100M.ss的运行结果部分截图: (*4)# ./simplesim-3.0/sim-cache –cache:dl1 dl1:1024:32:1:l mcf00.O2unroll.gcc.100M.ss 总失效次数:432;容量失效+冲突失效:19;强制性失效:432-19=413●Anagram的运行结果部分截图: (*8)# ./simplesim-3.0/sim-cache –cache:dl1 dl1:2048:32:1:l anagram总失效次数:437;容量失效+冲突失效:2;强制性失效:437-2=435●mcf00.O2unroll.gcc.100M.ss的运行结果部分截图: (*64)# ./simplesim-3.0/sim-cache –cache:dl1 dl1: 16384:32:1:l mcf00.O2unroll.gcc.100M.ss 总失效次数:424;容量失效+冲突失效:0;强制性失效:424-0=4243.改变Cache的相联度(1路,2路,4路,8路,64路),运行程序(指明所选的测试程序),统计各种失效的次数,并分析相联度对Cache性能的影响;例:# ./simplesim-3.0/sim-cache –cache:dl1 dl1: 256:32:2:l test_math●test_math的运行结果部分截图: (2路)总失效次数:557;容量失效+冲突失效:123;强制性失效:557- 123 = 434●art00.O2unroll.gcc.100M.ss的运行结果部分截图: (4路)总失效次数:446;容量失效+冲突失效:0;强制性失效:446- 0 = 446●test_math的运行结果部分截图: (8路)总失效次数:541;容量失效+冲突失效:0 ;强制性失效:541- 0 = 541●art00.O2unroll.gcc.100M.ss的运行结果部分截图: (64路)总失效次数:446;容量失效+冲突失效:0;强制性失效:446- 0 = 4464.改变Cache块大小(*2,*4,*8,*64),运行程序(指明所选的测试程序),统计各种失效的次数,并分析Cache块大小对Cache性能的影响;例:# ./simplesim-3.0/sim-cache –cache:dl1 dl1: 256:64:1:l test_math●test_math的运行结果部分截图: (*2)总失效次数:312;容量失效+冲突失效:96;强制性失效:312- 96 = 216●art00.O2unroll.gcc.100M.ss的运行结果部分截图: (*4)总失效次数:1;容量失效+冲突失效:0;强制性失效:1- 0 = 1●test_math的运行结果部分截图: (*8)总失效次数:1;容量失效+冲突失效:0;强制性失效:1- 0=1●art00.O2unroll.gcc.100M.ss的运行结果部分截图: (*64)总失效次数:1;容量失效+冲突失效:0;强制性失效:1- 0=15.分别采用LRU与随机法,在不同的Cache容量、不同的相联度下,运行程序(指明所选的测试程序)统计Cache总失效次数,计算失效率。

相关主题