系统结构实验.docx
《系统结构实验.docx》由会员分享,可在线阅读,更多相关《系统结构实验.docx(41页珍藏版)》请在冰豆网上搜索。
系统结构实验
系统结构实验报告
11070113臧琦
11070230曾凯
实验一流水线中的相关
1、实验目的
1.熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;
2.加深对计算机流水线基本概念的理解;
3.进一步了解DLX基本流水线各段的功能以及基本操作;
4.加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;
5.了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停
2、实验平台
用WinDLX模拟器模拟流水线。
3、实验要求
1.用WinDLX模拟器执行下列三个程序:
求阶乘程序fact.s
求最大公倍数程序gcm.s
求素数程序prim.s
分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察
CPU中寄存器和存储器的内容。
熟练掌握WinDLX的操作和使用。
2.用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源
相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。
3.在不采用定向技术的情况下(去掉Configuration菜单中EnableForwarding选项前的勾选符),用WinDLX运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
在采用定向技术的情况下(勾选EnableForwarding),用WinDLX再次运行程序data_d.s。
重复上述3中的工作,并计算采用定向技术后性能提高的倍数。
4、实验结果
4.1用WinDLX模拟器执行下列三个程序
4.1.1用WinDLX模拟器执行阶乘程序fact.s的结果如下所示
●步进方式运行程序结果如下所示
图1以步进方式进行的过程
●连续方式运行程序结果如下所示
图2连续方式,程序无间断的进行
●设置断点方式运行程序结果如下所示
图3通过设置不同的断点来控制程序的执行
4.1.2用WinDLX模拟器执行阶乘程序gcm.s的结果如下所示
●步进方式运行程序结果如下所示
图4以步进方式进行的过程,经过有限的步骤将程序的结果运行出来
●连续方式运行程序结果如下所示
图5连续方式,程序无间断的进行,直到程序结束
●设置断点方式运行程序结果如下所示
图6通过设置不同的断点来控制程序的执行
4.1.3用WinDLX模拟器执行阶乘程序prim.s的结果如下所示
●步进方式运行程序结果如下所示
图7以步进方式进行的过程
●连续方式运行程序结果如下所示
图8连续方式,程序无间断的进行,直到程序结束
●设置断点方式运行程序结果如下所示
图9通过设置不同的断点来控制程序的执行
4.2用WinDLX模拟运行器程序structure_d.s,进行相关实验
图10structure_d.s程序运行的流水线图
●资源相关的指令对
(1)
ADDDF0,F0,F4
ADDDF2,F0,F2;
导致资源相关的部件:
ALU;指令ADDDF2,F0,F2在译码阶段ID停滞1周期
(2)
ADDDF2,F0,F2
ADDIR2,R2,#8
导致资源相关的部件:
ALU;指令ADDIR2,R2,#8在执行阶段intEX停滞1周期
(3)
ADDDF2,F0,F2
ADDIR2,R2,#8;(mem部件相关)
ADDIR3,R3,#8;(mem部件相关)
SUBR5,R4,R2;(mem部件相关)
●由资源相关引起的暂停时钟周期数
图11程序执行总的周期数以及延迟的周期数
由资源相关引起的暂停周期数为:
30
总执行周期数为:
139
暂停周期数占总执行周期数的百分比:
30/139=21.58%
●分析及解决办法
分析:
资源相关使相关指令在流水线上停滞,降低了执行效率,使cpu的性能下降。
解决方法:
在合理的指令调度范围内,尽量避免执行重复的指令。
尽量避免同一寄存器的频繁使用,若无法避免,则使用寄存器换名的方法。
4.3比较定向与不定向技术,用WinDLX模拟运行器程序data_d.s,进行相关实验
4.3.1采用不定向技术,用WinDLX模拟运行器程序data_d.s,进行相关实验
图12采用非定向技术运行的结果图
由数据相关引起的暂停时钟周期数为:
104
总执行周期数为:
202
暂停周期数占总执行周期数的百分比:
104/202=51.48%
4.3.2采用定向技术,用WinDLX模拟运行器程序data_d.s,进行相关实验
在采用定向技术的情况下(勾选EnableForwarding),用WinDLX再次运行程序data_d.s。
重复上述3中的工作,并计算采用定向技术后性能提高的倍数。
图13定向技术相关结果的截图
由数据相关引起的暂停时钟周期数为:
30
总执行周期数为:
128
暂停周期数占总执行周期数的百分比:
30/128=23.44%
总结:
采用定向技术性能提高的倍数:
202/128=1.58倍
5、总结与体会
这次实验让我很好的学习了windlx的用法,对其中的各种操作以及性质有了更好的认识与应用,为之后的学习以及发展带来了极大的便利。
同个对几个.s程序的运行,让我对流水线的过程有了更加清楚的认识,将课堂上学到的理论知识运用到了实际中去。
同时,对数据相关、资源相关等有了更好的认识与了解,对程序的简化运行有了更加清楚的认识,为以后清楚的快捷的运行提供了思想的基础。
最后,对定向技术以及其性能有了更加清楚的了解,充分认识了定向技术的优点,在以后的开发应用中,要多采用定向技术,可以减少程序的运行周期,提高程序的运行效率。
实验二循环展开及指令调度
1、实验目的
1.加深对循环级并行性、指令调度技术、循环展开技术以及寄存器换名技术的理解;
2.熟悉用指令调度技术来解决流水线中的数据相关的方法;
3.了解循环展开、指令调度等技术对CPU性能的改进。
2、实验平台
用WinDLX模拟器模拟流水线。
3、实验要求
1.用指令调度技术解决流水线中的结构相关与数据相关
(1)用DLX汇编语言编写代码文件*.s,程序中应包括数据相关与结构相关(假设:
加
法﹑乘法﹑除法部件各有2个,延迟时间都是3个时钟周期)
(2)通过Configuration菜单中的“Floatingpointstages”选项,把加法﹑乘法﹑除法
部件的个数设置为2个,把延迟都设置为3个时钟周期;
(3)用WinDLX运行程序。
记录程序执行过程中各种相关发生的次数、发生相关的指
令组合,以及程序执行的总时钟周期数;
(4)采用指令调度技术对程序进行指令调度,消除相关;
(5)用WinDLX运行调度后的程序,观察程序在流水线中的执行情况,记录程序执行
的总时钟周期数;
(6)根据记录结果,比较调度前和调度后的性能。
论述指令调度对于提高CPU性能的
意义。
2.用循环展开、寄存器换名以及指令调度提高性能
(1)用DLX汇编语言编写代码文件*.s,程序中包含一个循环次数为4的整数倍的简单
循环;
(2)用WinDLX运行该程序。
记录执行过程中各种相关发生的次数以及程序执行的总
时钟周期数;
(3)将循环展开3次,将4个循环体组成的代码代替原来的循环体,并对程序做相应的
修改。
然后对新的循环体进行寄存器换名和指令调度;
(4)用WinDLX运行修改后的程序,记录执行过程中各种相关发生的次数以及程序执
4、实验结果
4.1用指令调度技术解决流水线中的结构相关与数据相关
4.1.1原指令执行的相关结果
●DLX汇编语言编写代码文件*.s的内容如下所示:
addff0,f0,f1
addff1,f3,f4
addff2,f0,f2
multff6,f2,f0
addff0,f0,f1
multff1,f6,f0
subff3,f7,f8
subff7,f3,f1
trap0
●通过Configuration菜单中的“Floatingpointstages”选项,把加法﹑乘法﹑除法部件的个数设置为2个,把延迟都设置为3个时钟周期
图2-1加法器、乘法器、除法器的设置
●程序运行的流水线图
图2-2程序执行时的流水线图
●指令执行结果的统计
图2-3指令执行结果的统计
从上图中,我们可以看到指令执行的总周期是22,发生相关的次数是4,总的延迟周期是14,各种相关指令的组合如下所示:
1、addff0,f0,f1
addff1,f3,f4对f0的数据相关
addff2,f0,f2
2、addff2,f0,f2
multff6,f2,f0对f2的数据相关
3、addff0,f0,f1
multff1,f6,f0对f1的数据相关
4、subff3,f7,f8
subff7,f3,f1对f3的数据相关
4.1.2调整指令顺序指令执行的结果
●调整指令后的顺序如下所示
addff0,f0,f1
addff1,f3,f4
subff3,f7,f8
addff2,f0,f2
multff6,f2,f0
subff7,f3,f1
addff0,f0,f1
multff1,f6,f0
trap0
●指令执行的流水线结果如下所示
图2-4指令执行的流水线图
●周期统计图
图2-5执行结果统计图
从上图中,我们可以看到指令执行的总周期是20,发生相关的次数是2,总的延迟周期是12
指令调度后的加速比是22/20=1.1,通过指令调度,可以充分利用cpu部件利用率,减少数据相关和资源相关引起的暂停。
4.2用循环展开、寄存器换名以及指令调度提高性能
4.2.1原循环程序运行的结果
●运行的程序如下所示
.data
A:
.word1
B:
.word4
.text
.globalmain
main:
lff0,A
lff1,B
Loop:
eqff1,f2
bfptFinish
addff2,f2,f0
subff4,f3,f7
addff5,f4,f8
multff6,f3,f9
subff7,f6,f3
jLoop
Finish:
trap0
程序运行的流水线图如下图所示
图2-6
●程序运行的统计结果图如下图所示
图2-7
总计执行周期:
70
总计时延:
32个周期
4.2.2将循环程序展开运行的结果
●运行的程序如下所示
subff4,f3,f7
addff5,f4,f8
multff6,f3,f9
subff7,f6,f3
subff4,f3,f7
addff5,f4,f8
multff6,f3,f9
subff7,f6,f3
subff4,f3,f7
addff5,f4,f8
multff6,f3,f9
subff7,f6,f3
subff4,f3,f7
addff5,f4,f8
multff6,f3,f9
subff7,f6,f3
trap0
●程序运行的流水线图如下图所示
图2-8
●程序运行的统计结果图如下图所示
图2-9
总计执行周期:
47
总计时延:
31个周期
从上面的结果可以看出,循环展开后的加速比为70/47=1.49;由此可见循环展开可以极大的提高cpu的效率。
4.2.3将程序循环展开、指令调度后运行的结果
●运行的程序如下所示
.data
A:
.word1
B:
.word4
.text
.globalmain
main:
lff0,A
lff1,B
subff4,f3,f7
multff6,f3,f9
addff5,f4,f8
subff7,f6,f3
subff4,f3,f7
multff6,f3,f9
addff5,f4,f8
subff7,f6,f3
subff4,f3,f7
multff6,f3,f9
addff5,f4,f8
subff7,f6,f3
subff4,f3,f7
multff6,f3,f9
addff5,f4,f8
subff7,f6,f3
trap0
程序运行的流水线图如下图所示
图2-10
●程序运行的统计结果图如下图所示
图2-9
总计执行周期:
39
总计时延:
22个周期
从上面的结果可以看出,循环展开后的加速比为70/39=1.79;由此可见循环展开、指令调度可以极大的提高cpu的效率。
5、总计与体会
这次实验让我对指令的调度有了很好的理解,通过指令调度执行时间的计算,更好的看出了指令调度可以极大的提高cpu的运行效率。
同时,循环展开也可以很好的提高cpu的运行效率,将两者结合起来,可以极大的提高运行的效率,为程序的运行带来极大的便利,在今后的程序设置以及程序的运行中,我们可以很好的利用这一特性,来提高我们程序运行的效率,节省时间。
实验三cache性能分析
1、实验目的
1.加深对Cache的基本概念、基本组织结构以及基本工作原理的理解;
2.了解Cache的容量、相联度、块大小对Cache性能的影响;
3.掌握降低Cache失效率的各种方法,以及这些方法对Cache性能提高的好处;
4.理解Cache失效的产生原因以及Cache的三种失效;
5.理解LRU与随机法的基本思想,及它们对Cache性能的影响;
2、实验平台
SimpleScalar模拟器
3、实验要求
1.在基本配置情况下运行程序(请指明所选的测试程序),统计Cache总失效次数、三种不同种类的失效次数;
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总失效次数,计算失效率。
分析不同的替换算法对Cache性能的影响。
测试程序:
用于实验的测试程序可以使用现有的,即benchmark目录下的所有程序;也可以自己用C语言直接生成各类典型程序比如:
数学运算类、输入输出类等,通过本环境提供的特定C编译器,编译生成对应的xxx.out(默认是a.out)测试程序用于实验。
每个测试程序所需时间大概是10分钟,选择测试程序时注意从不同组中选择,以便使得出的结果不会因为对单项有所侧重而有失偏颇。
每个人从中选出4~6个测试程序进行测试。
4、实验结果
4.1.基本配置情况下运行程序
默认参数如下所示:
-cache:
dl1dl1:
256:
32:
1:
l
-cache:
dl2ul2:
1024:
64:
4:
l
-cache:
il1il1:
256:
32:
1:
l
Ø对于测试程序benchmark\bin.little\test-math测试结果如下所示
il1.misses(指令cache)23761#totalnumberofmisses
dl1.misses(数据cache)804#totalnumberofmisses
ul2.misses1203#totalnumberofmisses
Ø对于测试程序benchmark\bin.little\test-lswlr测试结果如下所示
il1.misses547#totalnumberofmisses
il1.miss_rate0.0627#missrate(i.e.,misses/ref)
dl1.misses459#totalnumberofmisses
dl1.miss_rate0.0971#missrate(i.e.,misses/ref)
ul2.misses477#totalnumberofmisses
4.2.改变Cache容量对Cache性能的影响
实验具体要求:
改变Cache容量(*2,*4,*8,*64),运行程序(指明所选的测试程序),统计各种失效的次数,并分析Cache容量对Cache性能的影响;
由于测试程序中指令项较多,因此在cache改变的实验中皆改变icache
通过下面的命令,将cache的由原来的256组变为512组
[root@localhostsimplescalar]#cd/root/simplescalar/simplesim-3.0/tests-pisa/bin.little
[root@localhostbin.little]#/root/simplescalar/simplesim-3.0/sim-cache-cache:
il1il1:
512:
32:
1:
ltest-math
1、测试程序为benchmark\bin.little\test-printf
Ø-cache:
il1il1:
256:
32:
1:
l
il1.misses112488#totalnumberofmisses
il1.miss_rate0.0620#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
512:
32:
1:
l
il1.misses60016#totalnumberofmisses
il1.miss_rate0.0331#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
1024:
32:
1:
l
il1.misses23335#totalnumberofmisses
il1.miss_rate0.0129#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
2048:
32:
1:
l
il1.misses8578#totalnumberofmisses
il1.miss_rate0.0047#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
16384:
32:
1:
l
il1.misses1515#totalnumberofmisses
il1.miss_rate0.0008#missrate(i.e.,misses/ref)
2、测试程序为benchmark\bin.little\test-llong
Ø-cache:
il1il1:
256:
32:
1:
l
il1.misses1130#totalnumberofmisses
il1.miss_rate0.0383#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
512:
32:
1:
l
il1.misses936#totalnumberofmisses
il1.miss_rate0.0317#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
1024:
32:
1:
l
il1.misses634#totalnumberofmisses
il1.miss_rate0.0215#missrate(i.e.,misses/ref)-
Ø-cache:
il1il1:
2048:
32:
1:
l
il1.misses594#totalnumberofmisses
il1.miss_rate0.0201#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
16384:
32:
1:
l
il1.misses534#totalnumberofmisses
il1.miss_rate0.0181#missrate(i.e.,misses/ref)
3、测试程序为benchmark\bin.little\anagram
Ø-cache:
il1il1:
256:
32:
1:
l
il1.misses577#totalnumberofmisses
il1.miss_rate0.0758#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
512:
32:
1:
l
il1.misses512#totalnumberofmisses
il1.miss_rate0.0672#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
1024:
32:
1:
l
il1.misses502#totalnumberofmisses
il1.miss_rate0.0659#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
2048:
32:
1:
l
il1.misses477#totalnumberofmisses
il1.miss_rate0.0626#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
16384:
32:
1:
l
il1.misses477#totalnumberofmisses
il1.miss_rate0.0626#missrate(i.e.,misses/ref)
4、测试程序为benchmark\bin.little\test-fmath
Ø-cache:
il1il1:
256:
32:
1:
l
il1.misses6093#totalnumberofmisses
il1.miss_rate0.1143#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
512:
32:
1:
l
il1.misses4100#totalnumberofmisses
il1.miss_rate0.0769#missrate(i.e.,misses/ref)
Ø-cache:
il1il1:
1024:
32:
1:
l
il1.misses2231#totalnumberofmisses
il1.miss_rate0.0418#missrate(i.e.