系统结构实验报告.docx
《系统结构实验报告.docx》由会员分享,可在线阅读,更多相关《系统结构实验报告.docx(28页珍藏版)》请在冰豆网上搜索。
![系统结构实验报告.docx](https://file1.bdocx.com/fileroot1/2023-1/22/3c0e6c1b-aebd-4f87-ab69-c4ca98f4a93d/3c0e6c1b-aebd-4f87-ab69-c4ca98f4a93d1.gif)
系统结构实验报告
北京工业大学计算机学院
系统结构实验报告
07044101
王文通
2010-12-1
目录
目录2
实验一流水线中的相关3
一、实验目的3
二、实验原理3
三、实验步骤3
四、实验总结5
实验二循环展开及指令调度6
一、实验目的6
二、实验原理6
三、实验步骤6
1.指令调度技术6
2.循环展开以及指令调度提高性能8
四、实验总结10
五、代码10
实验三cache性能分析13
一、实验目的13
二、实验原理13
三、实验过程13
1.基本配置情况下运行程序13
2.改变Cache容量对Cache性能的影响;14
3.改变Cache的相联度对Cache性能的影响;16
4.改变Cache块大小对Cache性能的影响;18
5.不同的替换算法对Cache性能的影响。
19
5.1不同容量下,不同的替换算法对Cache性能的影响19
5.2不同相联度下,不同的替换算法对Cache性能的影响21
实验一流水线中的相关
一、实验目的
1.熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;
2.加深对计算机流水线基本概念的理解;
3.进一步了解DLX基本流水线各段的功能以及基本操作;
4.加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;
5.了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停
二、实验原理
用WinDLX模拟器模拟流水线。
三、实验步骤
1.用WinDLX模拟器执行下列三个程序:
求阶乘程序fact.s
求最大公倍数程序gcm.s
求素数程序prim.s
分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。
熟练掌握WinDLX的操作和使用。
2.用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。
资源相关:
ADDDF0,F0,F4
ADDDF2,F0,F2;加法器
ADDDF2,F0,F2
ADDIR2,R2,#8;加法器
ADDDF2,F0,F2
ADDIR2,R2,#8;MEM
ADDIR3,R3,#8;MEM
SUBR5,R4,R2;MEM
由资源相关引起的暂停时钟周期数是50个(每次循环5个,共10次循环),暂停时钟周期数占总执行周期数的百分比50/139=35.97%
资源相关降低CPU的性能,效率下降。
资源相关引起的暂停,可以采取指令调度的方法进行改进。
3.在不采用定向技术的情况下(去掉Configuration菜单中EnableForwarding选项前的勾选符),用WinDLX运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
数据相关:
数据相关引起的时钟周期数是104个,执行程序总时钟周期数是202个。
暂停时钟周期数占总执行周期数的百分比54.18%
在采用定向技术的情况下(勾选EnableForwarding),用WinDLX再次运行程序data_d.s。
重复上述3中的工作,并计算采用定向技术后性能提高的倍数。
数据相关引起的时钟周期数是30个,执行程序总时钟周期数是128个。
暂停时钟周期数占总执行周期数的百分比23.44%
采用定向技术后性能提高202/128=1.58倍
四、实验总结
采用流水线技术会遇到:
数据相关、控制相关、资源相关等问题。
为解决数据相关引起的暂停,可以采用指令调度和定向技术的方法来避免。
通过指令调度,使相关的数据执行距离拉开,使得不会发生数据相关。
通过定向技术,可以将相关数据结果直接传送到所有需要它的功能单元的输入端,避免数据相关引起的暂停。
为解决控制相关引起的暂停,可以使用循环展开的方法来减少控制相关的次数。
为解决资源相关引起的暂停,可以采用指令调度的方法来避免。
通过指令调度,使相关的资源使用的距离拉开,使得不会发生资源相关。
实验二循环展开及指令调度
一、实验目的
1.加深对循环级并行性、指令调度技术、循环展开技术以及寄存器换名技术的理解;
2.熟悉用指令调度技术来解决流水线中的数据相关的方法;
3.了解循环展开、指令调度等技术对CPU性能的改进。
二、实验原理
用WinDLX模拟器模拟流水线。
三、实验步骤
1.指令调度技术
(1)用DLX汇编语言编写代码文件*.s,程序中应包括数据相关与结构相关(假设:
加法﹑乘法﹑除法部件各有2个,延迟时间都是3个时钟周期)
(2)通过Configuration菜单中的“Floatingpointstages”选项,把加法﹑乘法﹑除法部件的个数设置为2个,把延迟都设置为3个时钟周期;
(3)用WinDLX运行程序。
记录程序执行过程中各种相关发生的次数、发生相关的指令组合,以及程序执行的总时钟周期数;
(4)采用指令调度技术对程序进行指令调度,消除相关;
(5)用WinDLX运行调度后的程序,观察程序在流水线中的执行情况,记录程序执行的总时钟周期数;
(6)根据记录结果,比较调度前和调度后的性能。
论述指令调度对于提高CPU性能的意义。
改进之前:
共用了76个周期
共发生36次相关
资源相关:
9次
数据相关:
17次
控制相关:
7次
Trap暂停:
3次
LWR1,0(R2)
ADDR1,R1,R3;数据相关,1次
ADDIR7,R0,8;资源相关,1次
LWR5,0(R1)
ADDIR5,R5,#10;数据相关,共发生8次
ADDIR2,R2,#4;资源相关,共发生8次
SUBR7,R7,1
BNEZR7,LOOP;数据相关,共发生8次
BNEZR7,LOOP
TRAP#0;控制相关,共发生7次
TRAP#0;Trap暂停3个周期
指令调度后:
共用了59个周期
共发生10次相关
控制相关:
7次
Trap暂停:
3次
指令调度后的加速比是76/59=1.29,通过指令调度,可以充分利用cpu部件利用率,减少数据相关和资源相关引起的暂停。
BNEZR7,LOOP
TRAP#0;控制相关,共发生7次
TRAP#0;Trap暂停3个周期
2.循环展开以及指令调度提高性能
(1)用DLX汇编语言编写代码文件*.s,程序中包含一个循环次数为4的整数倍的简单循环;
(2)用WinDLX运行该程序。
记录执行过程中各种相关发生的次数以及程序执行的总时钟周期数;
(3)将循环展开3次,将4个循环体组成的代码代替原来的循环体,并对程序做相应的修改。
然后对新的循环体进行寄存器换名和指令调度;
(4)用WinDLX运行修改后的程序,记录执行过程中各种相关发生的次数以及程序执行的总时钟周期数;
(5)根据记录结果,比较循环展开、指令调度前后的性能。
单纯循环展开:
共用了58个周期
共发生24次相关
资源相关:
9次
数据相关:
11次
控制相关:
1次
Trap暂停:
3次
指令调度后的加速比是76/58=1.31,通过循环展开,可以充分利用cpu部件利用率,减少控制相关引起的冲刷和数据相关引起的暂停。
LWR1,0(R2)
ADDR1,R1,R3;数据相关,1次
ADDIR7,R0,8;资源相关,1次
LWR5,0(R1)
ADDIR5,R5,#10;数据相关,共发生8次
ADDIR2,R2,#4;资源相关,共发生8次
SUBR7,R7,1
BNEZR7,LOOP;数据相关,共发生2次
BNEZR7,LOOP
TRAP#0;控制相关,共发生1次
TRAP#0;Trap暂停3个周期
循环展开+指令调度:
共用了47个周期
共发生4次相关
控制相关:
1次
Trap暂停:
3次
指令调度后的加速比是76/47=1.62。
BNEZR7,LOOP
TRAP#0;控制相关,共发生1次
TRAP#0;Trap暂停3个周期
四、实验总结
循环展开和指令调度都能提高cpu性能,减少暂停,但是两者同时进行改进时,优化性能并不是单纯的相加。
因为循环展开的改进也会减少和循环判断有关的数据相关。
同时,循环展开和指令调度对cpu性能提高的能力也因不同程序而异,若循环次数较多,则采取循环展开获得的cpu性能提升较高,若数据相关、资源相关较多,则采取指令调度获得的cpu性能提升较高。
五、代码
改进前代码:
LHIR2,(A>>16)&0XFFFF
ADDUIR2,R2,A+8
LHIR3,(B>>16)&0XFFFF
ADDUIR3,R3,B&0XFFFF
LWR1,0(R2)
ADDR1,R1,R3
ADDIR7,R0,8
LOOP:
LWR5,0(R1)
ADDIR5,R5,#10
ADDIR2,R2,#4
SUBR7,R7,1
BNEZR7,LOOP
TRAP#0
A:
.WORD0,4,8,12,16,20,24,28,32,36
B:
.WORD9,8,7,6,5,4,3,2,1,0
指令调度后代码:
LHIR2,(A>>16)&0XFFFF
ADDUIR2,R2,A+8
LHIR3,(B>>16)&0XFFFF
ADDUIR3,R3,B&0XFFFF
LWR1,0(R2)
ADDIR7,R0,8
ADDR1,R1,R3
LOOP:
LWR5,0(R1)
ADDIR2,R2,#4
SUBR7,R7,1
ADDIR5,R5,#10
BNEZR7,LOOP
TRAP#0
A:
.WORD0,4,8,12,16,20,24,28,32,36
B:
.WORD9,8,7,6,5,4,3,2,1,0
循环展开后代码:
LHIR2,(A>>16)&0XFFFF
ADDUIR2,R2,A+8
LHIR3,(B>>16)&0XFFFF
ADDUIR3,R3,B&0XFFFF
LWR1,0(R2)
ADDR1,R1,R3
ADDIR7,R0,8
LOOP:
LWR5,0(R1)
ADDIR5,R5,#10
ADDIR2,R2,#4
SUBR7,R7,1
LWR5,0(R1)
ADDIR5,R5,#10
ADDIR2,R2,#4
SUBR7,R7,1
LWR5,0(R1)
ADDIR5,R5,#10
ADDIR2,R2,#4
SUBR7,R7,1
LWR5,0(R1)
ADDIR5,R5,#10
ADDIR2,R2,#4
SUBR7,R7,1
BNEZR7,LOOP
TRAP#0
A:
.WORD0,4,8,12,16,20,24,28,32,36
B:
.WORD9,8,7,6,5,4,3,2,1,0
循环展开+指令调度后的代码:
LHIR2,(A>>16)&0XFFFF
ADDUIR2,R2,A+8
LHIR3,(B>>16)&0XFFFF
ADDUIR3,R3,B&0XFFFF
LWR1,0(R2)
ADDIR7,R0,8
ADDR1,R1,R3
LOOP:
LWR5,0(R1)
ADDIR2,R2,#4
SUBR7,R7,1
ADDIR5,R5,#10
LWR5,0(R1)
ADDIR2,R2,#4
SUBR7,R7,1
ADDIR5,R5,#10
LWR5,0(R1)
ADDIR2,R2,#4
SUBR7,R7,1
ADDIR5,R5,#10
LWR5,0(R1)
ADDIR2,R2,#4
SUBR7,R7,1
ADDIR5,R5,#10
BNEZR7,LOOP
TRAP#0
A:
.WORD0,4,8,12,16,20,24,28,32,36
B:
.WORD9,8,7,6,5,4,3,2,1,0
实验三cache性能分析
一、实验目的
1.加深对Cache的基本概念、基本组织结构以及基本工作原理的理解;
2.了解Cache的容量、相联度、块大小对Cache性能的影响;
3.掌握降低Cache失效率的各种方法,以及这些方法对Cache性能提高的好处;
4.理解Cache失效的产生原因以及Cache的三种失效;
5.理解LRU与随机法的基本思想,及它们对Cache性能的影响;
二、实验原理
现代微机系统结构的另一重要技术是Cache。
但是Cache一般位于CPU内部,即使是对汇编语言程序员也是不可见的。
为了直观的建立Cache技术的各种概念,形象的学习甚至于自己动手进行Cache性能分析,设计一系列有针对性的仿真实验是个很好的教学方法。
SimpleScalar工具集中有专门针对Cache技术的模拟器sim-cache和sim-cheetah,正是完成这些仿真实验的理想平台。
借助这两个工具,我们在系统结构课程中增设了Cache性能分析的系列仿真实验帮助学生更好的理解和掌握Cache技术。
三、实验过程
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.misses23761#totalnumberofmisses
il1.miss_rate0.1113#missrate(i.e.,misses/ref)
benchmark\supplied\vortex.ss
il1.misses5122#totalnumberofmisses
il1.miss_rate0.1223#missrate(i.e.,misses/ref)
benchmark\bin.little\test-fmath
2.改变Cache容量对Cache性能的影响;
benchmark\bin.little\test-printf
-cache:
il1il1:
512:
32:
1:
l
-cache:
il1il1:
1024:
32:
1:
l
-cache:
il1il1:
2048:
32:
1:
l
-cache:
il1il1:
16384:
32:
1:
l
benchmark\bin.little\test-math
-cache:
il1il1:
512:
32:
1:
l
il1.misses15565#totalnumberofmisses
il1.miss_rate0.0729#missrate(i.e.,misses/ref)
-cache:
il1il1:
1024:
32:
1:
l
il1.misses6614#totalnumberofmisses
il1.miss_rate0.0310#missrate(i.e.,misses/ref)
-cache:
il1il1:
2048:
32:
1:
l
il1.misses2712#totalnumberofmisses
il1.miss_rate0.0127#missrate(i.e.,misses/ref)
-cache:
il1il1:
16384:
32:
1:
l
il1.misses1636#totalnumberofmisses
il1.miss_rate0.0077#missrate(i.e.,misses/ref)
benchmark\supplied\vortex.ss
-cache:
il1il1:
512:
32:
1:
l
il1.misses3241#totalnumberofmisses
il1.miss_rate0.0774#missrate(i.e.,misses/ref)
-cache:
il1il1:
1024:
32:
1:
l
il1.misses2497#totalnumberofmisses
il1.miss_rate0.0596#missrate(i.e.,misses/ref)
-cache:
il1il1:
2048:
32:
1:
l
il1.misses1111#totalnumberofmisses
il1.miss_rate0.0265#missrate(i.e.,misses/ref)
-cache:
il1il1:
16384:
32:
1:
l
il1.misses590#totalnumberofmisses
il1.miss_rate0.0141#missrate(i.e.,misses/ref)
Cache容量对Cache性能的影响:
Cache容量越大,失效率越低,命中率越高。
3.改变Cache的相联度对Cache性能的影响;
benchmark\bin.little\test-printf
-cache:
il1il1:
256:
32:
1:
l
-cache:
il1il1:
256:
32:
2:
l
-cache:
il1il1:
256:
32:
4:
l
-cache:
il1il1:
256:
32:
8:
l
-cache:
il1il1:
256:
32:
64:
l
benchmark\bin.little\test-math
-cache:
il1il1:
256:
32:
1:
l
il1.misses23761#totalnumberofmisses
il1.miss_rate0.1113#missrate(i.e.,misses/ref)
-cache:
il1il1:
256:
32:
2:
l
il1.misses13479#totalnumberofmisses
il1.miss_rate0.0631#missrate(i.e.,misses/ref)
-cache:
il1il1:
256:
32:
4:
l
il1.misses4889#totalnumberofmisses
il1.miss_rate0.0229#missrate(i.e.,misses/ref)
-cache:
il1il1:
256:
32:
8:
l
il1.misses1640#totalnumberofmisses
il1.miss_rate0.0077#missrate(i.e.,misses/ref)
-cache:
il1il1:
256:
32:
64:
l
il1.misses1636#totalnumberofmisses
il1.miss_rate0.0077#missrate(i.e.,misses/ref)
benchmark\supplied\vortex.ss
-cache:
il1il1:
256:
32:
1:
l
il1.misses5122#totalnumberofmisses
il1.miss_rate0.1223#missrate(i.e.,misses/ref)
-cache:
il1il1:
256:
32:
2:
l
il1.misses2575#totalnumberofmisses
il1.miss_rate0.0615#missrate(i.e.,misses/ref)
-cache:
il1il1:
256:
32:
4:
l
il1.misses619#totalnumberofmisses
il1.miss_rate0.0148#missrate(i.e.,misses/ref)
-cache:
il1il1:
256:
32:
8:
l
il1.misses590#totalnumberofmisses
il1.miss_rate0.0141#missrate(i.e.,misses/ref)
-cache:
il1il1:
256:
32:
64:
l
il1.misses590#totalnumberofmisses
il1.miss_rate0.0141#missrate(i.e.,misses/ref)
相联度对Cache性能的影响:
相联度越路数越大,失效率越低,命中率越高。
4.改变Cache块大小对Cache性能的影响;
benchmark\bin.little\test-printf
-cache:
il1il1:
256:
64:
1:
l-cache:
dl2ul2:
1024:
256:
4:
l
-cache:
il1il1:
256:
128:
1:
l-cache:
dl2ul2:
1024:
256:
4:
l
-cache:
il1il1:
256:
256:
1:
l-cache:
dl2ul2:
1024:
256:
4:
l
-cache:
il1il1:
256:
2048:
1:
l-cache:
dl2ul2:
1024:
2048:
4:
l
benchmark\bin.little\test-math
-cache:
il1il1:
256:
64:
1:
l-cache:
dl2ul2:
1024:
256:
4:
l
-cache:
il1il1:
256:
128:
1:
l-cache: