计算机系统结构实验报告西安交通大学.docx
- 文档编号:10511034
- 上传时间:2023-02-17
- 格式:DOCX
- 页数:27
- 大小:524.08KB
计算机系统结构实验报告西安交通大学.docx
《计算机系统结构实验报告西安交通大学.docx》由会员分享,可在线阅读,更多相关《计算机系统结构实验报告西安交通大学.docx(27页珍藏版)》请在冰豆网上搜索。
计算机系统结构实验报告西安交通大学
计算机系统结构课内实验》
实验报告
班级:
计算机15班姓名:
高君宇学号:
2110505112日期:
2014.5.7
动态分支预测实验
一、实验目的及要求
1.了解掌握动态分支与推断执行技术对流水线性能的改进效果
2.了解动态分支预测的基本技术;
3.了解推断执行的基本过程;
4.比较各种分支预测技术的性能。
二、实验环境
Linux、SimpleScalarToolSet、SPEC测试程序
三、实验内容
利用SimpleScalar仿真器中的分支预测仿真程序sim-pred运行所提供的三个benchmark程序,分别采用五种不同的分支预测方法,即bimod方式,two-leveladaptive方式,alwaystaken方式,alwaysnottaken方式,comb方式,并对前两种分别使用下表中两种参数配置;分析仿真器输出的关于分支预测的统计参数集,填写表格,并对各仿真器的能力给出相应说明。
命令格式为:
./sim-bpred{-option}executable_benchmark–argument
对于三种动态方法,分别说明如下:
bimod是最普通的,即采用一个2bit宽的分支方向预测表,按分支地址查找,2bit分支预测器的判断和更新与课本上的一致。
这种方式只有一个参数,就是分支预测表的长度。
2-level要复杂一些,它采用两级表格式,第一级是分支历史表,存放各组分支历史寄存器的值,第二级是全局/局部分支模式表,(全局或局部应是由表长相对于分支历史寄存器的长决定),它存放各分支历史模式的2bit预测器。
在判断时用当前分支指令对应的历史寄存器值去索引二级表得到相应预测器值。
更新时,把当前分支的方向左移入历史寄存器,并对使用过的2bit预测器作更新。
它有四个参数,前三个是一级表长度,二级表长度,历史寄存器宽度,最后一个是异或标志。
如果为1,则将历史寄存器的值与当前分支指令地址异或,用其结果再去索引二级模式表。
comb方式则组合了以上两种方法,它再加入了一个meta表,这个表类似bimod的预测表,只是它预测的是采取bimod还是2-level,也采用2-bit预测器,被采取的预测方法被定为第一方向,未被采取的定为第二方向。
更新时,如果第一方向与第二方向不同则更新meta表,否则只更新两种方法各自的表即可。
它共有三组参数,前两组即bimod和two-level的参数,第三组是关于meta表长度的说明。
至于BTB的更新与cache的更新方式相同。
四、实验步骤
1.在linux的环境下,进入到simpleScalar文件的根目录;
2.调整好命令的格式并运行(下面给出运行命令的的一部分内容):
./sim-bpred-bpredtakentests/bin.little/test-math
./sim-bpred-bprednottakentests/bin.little/test-math
./sim-bpred-bpredbimod-bpred:
bimod512tests/bin.little/test-math
./sim-bpred-bpredbimod-bpred:
bimod1024tests/bin.little/test-math
./sim-bpred-bpred2lev-bpred:
2lev11024801tests/bin.little/test-math
./sim-bpred-bpred2lev-bpred:
2lev16461tests/bin.little/test-math
./sim-bpred-bpredcomb-bpred:
comb1024-bpred:
2lev1102480-bpred:
bimod1024tests/bin.little/test-math
五、实验结果将结果总结如下表:
1.测试程序为test.math
预测方计结果测方法
alwaysnottaken
alwaystaken
bimod
(516)
bimod
(1024)
2-level(1,1024,8,0)
2-level(1,64,6,
1)
comb
(1024)(1,1024,8
0)
(1024)
sim_total_insn
2136
88
2136
88
213688
213688
213668
213723
213723
sim_total_refs
5689
7
5689
7
56897
56897
56897
56900
56900
sim_num_branches
3859
1
3859
1
38591
38591
38591
38599
38599
simelapsedtime
1
1
1
1
1
1
1
siminstrate
2136
2136
213688.0
213688.0
213688
213723
213723
88
88
000
000
simIPB
5.537
5.537
5.5372
5.5372
5.5372
5.537
5.537
2
2
bpred_bimod.looku
3859
3859
38591
38591
38591
38599
38599
ps
1
1
bpred_bimod.update
3859
3859
38591
38591
38591
38599
38599
s
1
1
bpred_bimod.addr_
2193
2556
34237
34237
34242
27961
35578
hits
8
1
bpred_bimod.dir_hir
2193
2556
34732
34732
34242
28514
36018
ts
8
1
bpred_bimod.misses
1665
1293
3859
3859
3797
10085
2581
3
0
bpredbimod.jrhits
3543
3543
3528
3528
3528
3529
3529
bpred_bimod.jr_see
n
3543
3543
3543
3543
3543
3544
3544
bpred_bimod.jr_non
3543
3543
28
28
28
28
28
_ras
hits.PP
bpred_bimod.jr_non
3543
3543
41
41
41
41
41
_ras
seen.PP
bpred_bimod.bpred
0.568
0.664
0.8872
0.8872
0.8873
0.7244
0.9217
_add
5
9
rrate
bpred_bimod.bpred
0.568
0.664
0.9000
0.9000
0.9016
0.7387
0.9331
_dir
5
9
rate
bpred_bimod.bpred
_jr_r
ate
1
1
0.9958
0.9958
0.9958
0.9958
0.9958
bpred_bimod.bpred_jr_nonrasrate.PP
1
1
0.6829
0.6829
0.6829
0.6829
0.6829
bpred_bimod.retstac
k_pu
shes
1
1
3504
3504
3504
3505
3505
bpred_bimod.retstack_pops
0
0
3502
3502
3502
3503
3503
bpred_bimod.used_r
as.PP
0
0
3502
3502
3502
3503
3503
bpred_bimod.ras_hit
0
0
3502
3500
3500
3501
3501
s.PP
bpred_bimod.ras_rat
0
0
0.9994
0.9994
0.9994
0.9994
0.9994
e.PP
2.测试程序为test.fmath
预测方统计结果方法
alwaysnottaken
alwaystaken
bimod(516)
bimod(1024)
2-level(1,1024,8,
0)
2-level(1,64,6,1)
comb
(1024)(1,1024,8,
0)
(1024)
sim_total_insn
53448
53448
5344
5344
53448
53482
53482
8
8
sim_total_refs
16342
16342
1634
1634
16342
16345
16345
2
2
sim_num_branches
10340
10340
1034
1034
10340
10347
10347
0
0
simelapsedtime
1
1
1
1
1
1
1
sim_inst_rate
53448
53448
5344
5344
53448
53482
53482
8
8
sim_IPB
5.169
5.169
5.169
5.169
5.1691
5.1688
5.1688
1
1
1
1
bpred_bimod.lookups
10340
10340
1034
1034
10340
10347
10347
0
0
bpred_bimod.updates
10340
10340
1034
1034
10340
10347
10347
0
0
bpredbimod.addrhits
5768
6839
8825
9021
8860
7574
9225
bpredbimod.dirhirts
5768
6839
9128
9315
9171
7888
9474
bpredbimod.misses
4572
3501
1212
1025
1169
2459
873
bpredbimod.jrhits
832
832
815
815
815
816
816
bpredbimod.jrseen
832
832
832
832
832
833
833
bpred_bimod.jr_non_r
832
832
4
4
4
4
4
as
hits.PP
bpred_bimod.jr_non_r
832
832
19
19
19
19
19
as
seen.PP
bpred_bimod.bpred_ad
0.557
0.661
0.853
0.872
0.8569
0.7320
0.8916
d
8
4
5
4
rrate
bpred_bimod.bpred_di
0.557
0.661
0.882
0.900
0.8869
0.7623
0.9156
r
8
4
8
9
rate
bpred_bimod.bpred_jr
1
1
0.979
0.979
0.2105
0.9796
0.9796
r
6
6
ate
bpred_bimod.bpred_jr
_n
onrasrate.PP
1
1
0.210
5
0.210
5
0.2105
0.2105
0.2105
bpred_bimod.retstack_pu
shes
0
0
815
815
815
816
816
bpred_bimod.retstack_
po
ps
0
0
813
813
813
814
814
bpred_bimod.used_ras.
PP
0
0
813
813
813
814
814
bpred_bimod.ras_hits.
PP
0
0
811
811
811
812
812
bpred_bimod.ras_rate.
PP
0
0
0.997
5
0.997
5
0.9975
0.9975
0.9975
3.测试程序为test.printf
预测方统计结果测方
alwaysnot法taken
alwaystaken
bimod
(516)
bimod
(1024)
2-level(1,1024,8,
0)
2-level(1,64,6,1)
comb
(1024)(1,1024,8,
0)
(1024)
sim_total_insn
18138
18138
18138
18138
1813877
181391
1813914
77
77
77
77
4
sim_total_refs
51694
51694
51694
51694
516941
516947
516947
1
1
1
1
sim_num_branches
40160
40160
40160
40160
401609
401623
401623
9
9
9
9
simelapsedtime
1
1
1
1
1
1
1
sim_inst_rate
18138
18138
18138
18138
1813877
181391
1813914
77
77
77
77
4
simIPB
4.5165
4.5165
4.5165
4.5165
4.5165
4.5165
4.5165
bpred_bimod.lookup
40160
40160
40160
40160
401609
401623
401623
s
9
9
9
9
bpred_bimod.updates
40160
40160
40160
40160
401609
401623
401623
9
9
9
9
bpred_bimod.addr_hi
23336
26136
37259
37745
373619
317099
384169
ts
1
3
1
8
bpred_bimod.dir_hirt
23336
26136
37490
37976
375930
319444
386404
s
1
3
1
1
bpred_bimod.misses
16824
14024
26708
21848
25679
82179
15219
8
6
bpredbimod.jrhits
31998
31998
30152
30152
30152
30153
30153
bpredbimod.jrseen
31998
31998
31998
31998
31998
31999
31999
bpred_bimod.jr_non_ras
hits.PP
31998
31998
363
363
363
363
363
bpred_bimod.jr_non_ras
seen.PP
31998
31998
2198
2198
2198
2198
2198
bpred_bimod.bpred_addrrate
0.5811
0.6508
0.9277
0.9399
0.9303
0.7865
0.9565
bpred_bimod.bpred_dir
rate
0.5811
0.6508
0.9335
0.9456
0.9361
0.7954
0.9621
bpred_bimod.bpred_j
1
1
0.9423
0.9423
0.9423
0.9423
0.9423
r_rate
bpred_bimod.bpred_jr_nonrasrate.PP
1
1
0.1652
0.1652
0.1652
0.1652
0.1652
bpred_bimod.retstack
_pu
shes
0
0
29802
29802
29802
29803
29803
bpred_bimod.retstack
_po
ps
0
0
29800
29800
29800
29801
29801
bpred_bimod.used_ra
s.PP
0
0
29800
29800
29800
29801
29801
bpred_bimod.ras_hits
.PP
0
0
29789
29789
29789
29790
29790
bpred_bimod.ras_rat
e.PP
0
0
0.9996
0.9996
0.996
0.9996
0.9996
六、总结所谓的动态分支处理方法,是指利用程序执行期间的信息,进行处理,所以这儿很明显带来的是硬件开销,因为程序执行期间是不可能由软件协助的,否则性能影响也就太大了吧。
相对的,静态分支处理,其实是利用编译器实现的。
这次实验我最大的感受就是计算机就像董老师说的一样,是在玩平衡。
体系结构设计的核心是平衡,以最快的速度获取指令,需要较少的时钟周期,但带来的是预测准确率的下降;如果希望提高准确率,则是较慢的速度;三种分支预测方式实现难度各不相同,在性能方面也各有优劣,一级分支预测追求的是快,二级分支预测追求的是准确率,这都是在玩平衡。
通过实验,我更加熟悉了动态分支预测的方法,学以致用才是硬道理,计算机的这个“平衡“还得好好玩下去。
七、附录(源程序清单)使用的是程序自带的源代码test.math,test.fmath,test.printf故在此不单独列出。
基本流水线和Tomasulo算法
实验
一、实验目的及要求
1.掌握DLXview模拟器的使用方法;
2.进一步理解指令动态调度的基本思想,了解指令动态调度的基本过程与方法;
3.理解记分牌算法和Tomasulo算法的基本思想,了解它们的基本结构、运行过程;
4.比较分析基本流水线与记分牌算法和Tomasulo算法的性能及优缺点。
二、实验环境
DLXview模拟器
三、实验内容
1、用DLX汇编语言编写代码文件*.s(程序中应包括指令的数据相关、控制相关以及结构相关),以及相关的初始化寄存器文件*.i和数据文件*.d;
2、观察程序中出现的数据相关、控制相关、结构相关,并指出三种相关的指令组合;
3、将自己编写的程序*.s、*.i、*.d装载到DLXview模拟器上,
4、分别用基本流水线和Tomasulo算法模拟,针对每一种模拟做如下分析:
(1)统计程序的执行周期数和流水线中的暂停时钟周期数;
(2)改变功能部件数目重新模拟,观察并记录性能的改变
(3)改变功能部件延迟重新模拟,观察并记录性能的改变;
5、记录运行Tomasulo算法时的指令状态表和保留站信息;
四、实验步骤
用DLX汇编语言编写代码文件*.s(程序中应包括指令的数据相关、控制相关以及结构相关),以及相关的初始化寄存器文件*.i和数据文件*.d;
将自己编写的程序*.s、*.i、*.d装载到DLXview模拟器上;
用DLXview模拟器进行模拟。
五、实验结果
一)普通流水线:
实验参数设置
实验结果显示该段程序运行了11个时钟周期
改变部件数目:
根据实验结果依然运行了11个时钟周期
所以对该f305程序增加除法器部件数目,不影响执行效率
增加了一个加法器部件
实验结果显示依然运行了11个时钟周期。
所以该f305程序对于加法器部件数目要求也不高,增加后不影响执行效率
增加了一个乘法器部件
实验结果依然运行了11个时钟周期
所以该f305程序对于乘法器部件数目要求不高,增
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机系统 结构 实验 报告 西安交通大学
![提示](https://static.bdocx.com/images/bang_tan.gif)