实验三动态分支预测与推断执行
软件07级2班陈良伟20073001016
实验目的:
(1)了解动态分支预测的基本技术
(2)了解推断执行的基本过程
(3)比较各种分支预测技术的性能
实验环境:
(1)Ubuntu9.04+(或其他Linux版本)
(2)SimpleScalarv3.0
实验原理:
SimpleScalar分支预测的实现方法。
实验步骤:
(1)进入SimpleScalar目录(simplesim-3.0)。
(2)用sim-pred仿真器运行tests/bin.little目录下的三个测试程序(test-math,test-fmath, test-printf),分别采用五种不同的分支预测方法,即bimod方式,two-leveladaptive方式,alwaystaken方式,alwaysnot taken方式,comb方式,并对前两种分别使用下表中两种参数配置:分析仿真器输出的关于分支预测的统计参数集,填写表格,并对各仿真器的能力
给出相应说明。
实验结果统计:
模拟程序名:test-math
| always taken | always not | bimod (512) | bimod (1024) | 2-level 8,0) | 2-level 1) | comb (1,1024, 8,0) | ||||||||
sim_total_insn | 213688 | 213688 | 213688 | 213688 | 213688 | 213688 | 213688 | ||||||||
sim_total_refs | 56897 | 56897 | 56897 | 56897 | 56897 | 56897 | 56897 | ||||||||
sim_elapsed_time | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||||
sim_inst_rate | 213688 | 213688 | 213688 | 213688 | 213688 | 213688 | 213688 | ||||||||
sim_num_branches | 38591 | 38591 | 38591 | 38591 | 38591 | 38591 | 38591 | ||||||||
sim_IPB | 5.5372 | 5.5372 | 5.5372 | 5.5372 | 5.5372 | 5.5372 | 5.5372 | ||||||||
bpred_***.lookups | 38591 | 38591 | 38591 | 38591 | 38591 | 38591 | 38591 | ||||||||
bpred_***.updates | 38591 | 38591 | 38591 | 38591 | 38591 | 38591 | 38591 | ||||||||
bpred_***.addr_hits | 25661 | 21938 | 33692 | 34237 | 34242 | 27844 | 35570 | ||||||||
bpred_***.dir_hirts | 25661 | 21938 | 34195 | 34732 | 34794 | 28387 | 36011 | ||||||||
bpred_***.misses | 12930 | 16653 | 4396 | 3859 | 3797 | 10204 | 2580 | ||||||||
bpred_***.jr_hits | 3543 | 3543 | 3528 | 3528 | 3528 | 3528 | 3528 | ||||||||
bpred_***.jr_seen | 3543 | 3543 | 3543 | 3543 | 3543 | 3543 | 3543 | ||||||||
bpred_***.jr_non_ras_hits.PP | 3543 | 3543 | 28 | 28 | 28 | 28 | 28 | ||||||||
bpred_***.jr_non_ras_seen.PP | 3543 | 3543 | 41 | 41 | 41 | 41 | 41 | ||||||||
bpred_***.bpred_addr_rate | 0.6649 | 0.5685 | 0.8731 | 0.8872 | 0.8873 | 0.7215 | 0.9217 | ||||||||
bpred_***.bpred_dir_rate | 0.6649 | 0.5685 | 0.8861 | 0.9 | 0.9016 | 0.7356 | 0.9331 | ||||||||
bpred_***.bpred_jr_rate | 1 | 1 | 0.9958 | 0.9958 | 0.9958 | 0.9958 | 0.9958 | ||||||||
bpred_***.bpred_jr_non_ras_rate .PP | 1 | 1 | 0.6829 | 0.6829 | 0.6829 | 0.6829 | 0.6829 | ||||||||
bpred_***.retstack_pushes | 0 | 0 | 3504 | 3504 | 3504 | 3504 | 3504 | ||||||||
bpred_***.retstack_pops | 0 | 0 | 3502 | 3502 | 3502 | 3502 | 3502 | ||||||||
bpred_***.used_ras.PP | 0 | 0 | 3502 | 3502 | 3502 | 3502 | 3502 | ||||||||
bpred_***.ras_hits.PP | 0 | 0 | 3500 | 3500 | 3500 | 3500 | 3500 | ||||||||
bpred_***.ras_rate.PP | <error: divide | <error: divide | 0.9994 | 0.9994 | 0.9994 | 0.9994 | 0.9994 |
分析:
bpred_***.addr_hits, | bpred_***.dir_hirts, | bpred_***.misses, | bpred_***.bpred_addr_rate, |
bpred_***.bpred_dir_rate这些参数7种不同的分支预测方法方法下各不相同。
bpred_***.jr_hits,bpred_***.jr_non_ras_hits.PP,bpred_***.jr_non_ras_seen.PP,bpred_***.bpred_jr_rate,
bpred_***.bpred_jr_non_ras_rate.PP, | bpred_***.retstack_pushes, | bpred_***.retstack_pops, |
bpred_***.used_ras.PP,bpred_***.ras_hits.PP,bpred_***.ras_rate.PP这些参数alwaystaken,alwaysnot taken各自相同,其余5种方法的也各自相同。
其余的参数对于7种不同的分支预测方法都没有改变。
模拟程序名:test-fmath
统 | 计 | 结 | 果 | 预 | 测 | 方 | 法 | always | always | bimod | bimod | 2-level | 2-level | comb | |||
taken | not | (512) | (1024) | (1,1024, | (1,64,6, | (1024) | |||||||||||
taken | |||||||||||||||||
8,0) | 1) | (1,1024, | |||||||||||||||
8,0) | |||||||||||||||||
sim_total_insn | 53448 | 53448 | 53448 | 53448 | 53448 | 53448 | (1024) | ||||||||||
53448 | |||||||||||||||||
sim_total_refs | |||||||||||||||||
16342 | 16342 | 16342 | 16342 | 16342 | 16342 | 16342 | |||||||||||
sim_elapsed_time | |||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | |||||||||||
sim_inst_rate | |||||||||||||||||
53448 | 53448 | 53448 | 53448 | 53448 | 53448 | 53448 | |||||||||||
sim_num_branches | |||||||||||||||||
10340 | 10340 | 10340 | 10340 | 10340 | 10340 | 10340 | |||||||||||
sim_IPB | 5.1691 | 5.1691 | 5.1691 | 5.1691 | 5.1691 | 5.1691 | 5.1691 | ||||||||||
bpred_***.lookups | 10340 | 10340 | 10340 | 10340 | 10340 | 10340 | 10340 | ||||||||||
bpred_***.updates | |||||||||||||||||
10340 | 10340 | 10340 | 10340 | 10340 | 10340 | 10340 | |||||||||||
bpred_***.addr_hits | |||||||||||||||||
6839 | 5768 | 8825 | 9021 | 8860 | 7541 | 9226 | |||||||||||
bpred_***.dir_hirts | |||||||||||||||||
6839 | 5768 | 9128 | 9315 | 9171 | 7857 | 9475 | |||||||||||
bpred_***.misses | |||||||||||||||||
3501 | 4572 | 1212 | 1025 | 1169 | 2483 | 865 | |||||||||||
bpred_***.jr_hits | |||||||||||||||||
832 | 832 | 815 | 815 | 815 | 815 | 815 | |||||||||||
bpred_***.jr_seen | |||||||||||||||||
832 | 832 | 832 | 832 | 832 | 832 | 832 | |||||||||||
bpred_***.jr_non_ras_hits.PP | |||||||||||||||||
832 | 832 | 4 | 4 | 4 | 4 | 4 | |||||||||||
bpred_***.jr_non_ras_seen.PP | |||||||||||||||||
832 | 832 | 19 | 19 | 19 | 19 | 19 | |||||||||||
bpred_***.bpred_addr_rate | 0.6614 | 0.5578 | 0.8535 | 0.8724 | 0.8569 | 0.7293 | 0.8923 | ||||||||||
bpred_***.bpred_dir_rate | 0.6614 | 0.5578 | 0.8828 | 0.9009 | 0.8869 | 0.7599 | 0.9163 | ||||||||||
bpred_***.bpred_jr_rate | |||||||||||||||||
1 | 1 | 0.9796 | 0.9796 | 0.9796 | 0.9796 | 0.9796 | |||||||||||
bpred_***.bpred_jr_non_ras_rate | |||||||||||||||||
1 | 1 | 0.2105 | 0.2105 | 0.2105 | 0.2105 | 0.2105 | |||||||||||
.PP | |||||||||||||||||
bpred_***.retstack_pushes | 0 | 0 | 815 | 815 | 815 | 815 | 815 | ||||||||||
bpred_***.retstack_pops | |||||||||||||||||
0 | 0 | 813 | 813 | 813 | 813 | 813 | |||||||||||
bpred_***.used_ras.PP | |||||||||||||||||
0 | 0 | 813 | 813 | 813 | 813 | 813 | |||||||||||
bpred_***.ras_hits.PP | |||||||||||||||||
0 | 0 | 811 | 811 | 811 | 811 | 811 | |||||||||||
bpred_***.ras_rate.PP | |||||||||||||||||
<error: | <error: | ||||||||||||||||
divide | divide | ||||||||||||||||
0.9975 | 0.9975 | 0.9975 | 0.9975 | 0.9975 | |||||||||||||
by | by | ||||||||||||||||
zero> | zero> |
分析:
bpred_***.addr_hits, | bpred_***.dir_hirts, | bpred_***.misses, | bpred_***.bpred_addr_rate, |
bpred_***.bpred_dir_rate这些参数7种不同的分支预测方法方法下各不相同。
bpred_***.jr_hits,bpred_***.jr_non_ras_hits.PP,bpred_***.jr_non_ras_seen.PP,bpred_***.bpred_jr_rate,
bpred_***.bpred_jr_non_ras_rate.PP, | bpred_***.retstack_pushes, | bpred_***.retstack_pops, |
bpred_***.used_ras.PP,bpred_***.ras_hits.PP,bpred_***.ras_rate.PP这些参数alwaystaken,alwaysnot taken各自相同,其余5种方法的也各自相同。
其余的参数对于7种不同的分支预测方法都没有改变。
模拟程序名:test-printf
| always taken | always not | bimod (512) | bimod (1024) | 2-level 8,0) | 2-level 1) | comb (1,1024, 8,0) | ||||||||
sim_total_insn | 181387 7 | 181387 7 | 181387 7 | 181387 7 | 181387 7 | 181387 7 | 181387 7 | ||||||||
sim_total_refs | 516941 | 516941 | 516941 | 516941 | 516941 | 516941 | 516941 | ||||||||
sim_elapsed_time | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||||||
sim_inst_rate | 181387 7 | 181387 7 | 181387 7 | 181387 7 | 181387 7 | 181387 7 | 181387 7 | ||||||||
sim_num_branches | 401609 | 401609 | 401609 | 401609 | 401609 | 401609 | 401609 | ||||||||
sim_IPB | 4.5165 | 4.5165 | 4.5165 | 4.5165 | 4.5165 | 4.5165 | 4.5165 | ||||||||
bpred_***.lookups | 401609 | 401609 | 401609 | 401609 | 401609 | 401609 | 401609 | ||||||||
bpred_***.updates | 401609 | 401609 | 401609 | 401609 | 401609 | 401609 | 401609 | ||||||||
bpred_***.addr_hits | 261363 | 233361 | 372591 | 377458 | 373619 | 323623 | 384151 | ||||||||
bpred_***.dir_hirts | 261363 | 233361 | 374901 | 379761 | 375930 | 325966 | 386385 | ||||||||
bpred_***.misses | 140246 | 168248 | 26708 | 21848 | 25679 | 75643 | 15224 | ||||||||
bpred_***.jr_hits | 31998 | 31998 | 30152 | 30152 | 30152 | 30152 | 30152 | ||||||||
bpred_***.jr_seen | 31998 | 31998 | 31998 | 31998 | 31998 | 31998 | 31998 | ||||||||
bpred_***.jr_non_ras_hits.PP | 31998 | 31998 | 363 | 363 | 363 | 363 | 363 | ||||||||
bpred_***.jr_non_ras_seen.PP | 31998 | 31998 | 2198 | 2198 | 2198 | 2198 | 2198 | ||||||||
bpred_***.bpred_addr_rate | 0.6508 | 0.5811 | 0.9277 | 0.9399 | 0.9303 | 0.8058 | 0.9565 | ||||||||
bpred_***.bpred_dir_rate | 0.6508 | 0.5811 | 0.9335 | 0.9456 | 0.9361 | 0.8117 | 0.9621 | ||||||||
bpred_***.bpred_jr_rate | 1 | 1 | 0.9423 | 0.9423 | 0.9423 | 0.9423 | 0.9423 | ||||||||
bpred_***.bpred_jr_non_ras_rate .PP | 1 | 1 | 0.1652 | 0.1652 | 0.1652 | 0.1652 | 0.1652 | ||||||||
bpred_***.retstack_pushes | 0 | 0 | 29802 | 29802 | 29802 | 29802 | 29802 | ||||||||
bpred_***.retstack_pops | 0 | 0 | 29800 | 29800 | 29800 | 29800 | 29800 | ||||||||
bpred_***.used_ras.PP | 0 | 0 | 29800 | 29800 | 29800 | 29800 | 29800 | ||||||||
bpred_***.ras_hits.PP | 0 | 0 | 29789 | 29789 | 29789 | 29789 | 29789 | ||||||||
bpred_***.ras_rate.PP | <error: divide | <error: divide | 0.9996 | 0.9996 | 0.9996 | 0.9996 | 0.9996 |
分析:
bpred_***.addr_hits, | bpred_***.dir_hirts, | bpred_***.misses, | bpred_***.bpred_addr_rate, |
bpred_***.bpred_dir_rate这些参数7种不同的分支预测方法方法下各不相同。
bpred_***.jr_hits,bpred_***.jr_non_ras_hits.PP,bpred_***.jr_non_ras_seen.PP,bpred_***.bpred_jr_rate,
bpred_***.bpred_jr_non_ras_rate.PP, | bpred_***.retstack_pushes, | bpred_***.retstack_pops, |
bpred_***.used_ras.PP,bpred_***.ras_hits.PP,bpred_***.ras_rate.PP这些参数alwaystaken,alwaysnot taken各自相同,其余5种方法的也各自相同。
其余的参数对于7种不同的分支预测方法都没有改变。
因篇幅问题不能全部显示,请点此查看更多更全内容