




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验3 SimpleScalar与程序优化8 路志桐 计科二班1、 简介:SimpleScalar 是上世纪由威斯康辛大学发布的一款开源模拟器,具备良好的可移植性和可扩展性。 作为一款时钟精确的模拟器,SimpleScalar 采用执行驱动方式模拟,包含功能模拟和性能模拟。SimpleScalar 的指令集架构采用C 语言宏声明,目前3.0 版本主要支持PISA 指令集和Alpha 指令集。根据模拟的目的不同,SimpleScalar 包含多个模拟器实体,从最简单的Sim-fast 到最为复杂的Sim-outorder,可分别用于功能模拟、Cache 配置策略、流水线
2、、前瞻预测等体系结构问题的全面研究。2、 安装:1、首先从官网上下载相关的文件:Simpletools-2v0.tgz;Simplesim-3v0e.tar.gz;Simpleutils-.tar.gz;Gcc-2.7.2.3.ss_.tar.gz ;2、然后安装flex,build-essential$ sudo apt-get install flex;$ sudo apt-get install build-essential;本来还需要bison的,不过之前安装过了,略过。另外除此之外我们还需要配置一下环境变量安装目录:$ export IDIR=/home/my/simplescal
3、ar设置主机:$ export HOST=i686-pc-linux设置目的机器成小字段机器:$ export TARGET=sslittle-na-sstrix3、设置完环境之后我们便可以安装simpletools了进入到目的地址后,我们用tar xzvf命令将之前下载下来的simpletools解压;由于simplescalar需要Gcc2.7以上版本支持,所以我们需要通过rm命令移除原先电脑自带的Gcc。$ cd $IDIR$ tar xzvf simpletools-2v0.tgz$ rm -rf gcc-2.6.34、其次是simpleutils$ tar xzvf simpleut
4、ils-.tar.gz$ cd simpleutils-然后编译前要打开simpleutils-/ld下的文件ldlex.l并且将里面全部的yy_current_buffer替换成大写,否则代码将会报错。然后就可以进行编译$./configure -host=$HOST -target=$TARGET -with-gnu-as -with-gnu-ld -prefix=$IDIR$ make$ make install5、接下来安装simplesim3.0$ cd $IDIR$ tar xzvf simplesim-3v0e.tgz$ cd simplesim-3.0$ make config
5、-alpha$ make6、最后安装gcc2.7编译器套件$ cd $IDIR$ tar xzvf gcc-2.7.2.3.ss.tar.gz$ cd gcc-2.7.2.3$ export PATH=$PATH:/home/YOUR_USER_NAME/simplescalar/sslittle-na-sstrix/bin$ ./configure -host=$HOST -target=$TARGET -with-gnu-as -with-gnu-ld -prefix=$IDIR这里面有好几处代码需要修改,我们一一修改了相应的代码!修改代码:./MakefileLine130:增加-I/u
6、sr/include或-I./include > -I /usr/include!修改代码:./protoize.c$ sudo chmod +w protoize.c !修改权限#include <varargs.h> > #include <stdarg.h>!修改代码:./obstack.h$ sudo chmod +w obstack.h !修改权限*(void *)_o->next_free)+=(void *)datum); > *(void *)_o->next_free+)=(void *)datum);!复制补丁文件$ c
7、p ./patched/sys/cdefs.h ./sslittle-na-sstrix/include/sys/cdefs.h$ cp ./sslittle-na-sstrix/lib/libc.a ./lib/$ cp ./sslittle-na-sstrix/lib/crt0.o ./lib/!解压ar-ranlib.tar.gz到$IDIR/sslittle-na-sstrix/bin!修改ar及ranlib的权限$ sudo chmod +w ar ranlib$ sudo chmod +x ar ranlib$ cd $IDIR/gcc-2.7.2.3$ make!修改代码:./i
8、nsn-output.cLine 675/750/823:末尾增加 “”$ make !修改代码:./objc/sendmsg.c$sudo chmod +w objc/sendmsg.c !修改权限Line35:增加#define STRUCT_VALUE 0$ make LANGUAGES="c c+" CFLAGS="-O" CC="gcc"!若出错,修改./cxxmain.c,删掉 2978-2979 行,即:char * malloc ();char * realloc ();!若无cxxmain,返回上文./Makefil
9、e确认修改,再继续重复流程$ make LANGUAGES="c c+" CFLAGS="-O" CC="gcc"$ make install LANGUAGES="c c+" CFLAGS="-O" CC="gcc"最后安装完成之后随意写一个C语言代码进行测试。用如下命令编译$IDIR/bin/sslittle-na-sstrix-gcc -o 1 1.c然后运行$IDIR/simplesim-3.0/sim-safe 1发现可以运行,安装成功3、 代码优化:比较各种分支预
10、测技术的性能SimpleScalar分支预测的实现方法是:先确定是否采取分支,即进行分支方向探测,然后是生成分支地址,对于调用返回指令,就在RAS上直接作相关操作,普通分支指令则需要利用BTB来地址探测,如果命中的话则生成地址。然后对两步进行综合,地址命中且分支预测为采取,返回分支目标地址;地址不命中且分支预测为采取,返回1;只要分支预测为不采取,就返回0。包括在仿真器上运行的三个程序的结果统计数据表格,以及对各种分支预测方法的对比分析。每一列对应的运行参数分别为: (1) test-math./sim-bpred -bpred taken tests/bin.little/test
11、-math./sim-bpred -bpred nottaken tests/bin.little/test-math./sim-bpred -bpred bimod -bpred:bimod 512 tests/bin.little/test-math./sim-bpred -bpred bimod -bpred:bimod 1024 tests/bin.little/test-math./sim-bpred -bpred 2lev -bpred:2lev 1 1024 8 01 tests/bin.little/test-math./sim-bpred -bpred 2lev -bpred
12、:2lev 1 64 6 1 tests/bin.little/test-math./sim-bpred -bpred comb -bpred:comb 1024 -bpred:2lev 1 1024 8 0 -bpred:bimod 1024 tests/bin.little/test-math always takenalways not takenbimod(512)bimod(1024)2-level(1,1024,8,0)2-level(1,64,6,1)comb(1024)(1,1024,8,0)(1024)sim_total_insnsim_total_refs5689
13、7568975689756897568975689756897sim_num_branches38591385913859138591385913859138591sim_elapsed_time1111111sim_inst_ratesim_IPB5.53725.53725.53725.53725.53725.53725.5372bpred_bimod.lookups38591385913859138591385913859138591bpred_bimod.updates38591385913859138591385913859138591bpred_bimod.addr_hits2566
14、1219383369234237342422784435570bpred_bimod.dir_hits25661219383419534732347942838736011bpred_bimod.misses1293016653439638593797102042580bpred_bimod.jr_hits3543354335283528352835283528bpred_bimod.jr_seen3543354335433543354335433543bpred_bimod.jr_non_ras_hits.PP354335432828282828bpred_bimod.jr_non_ras_
15、seen.PP354335434141414141bpred_bimod.bpred_addr_rate0.66490.56850.87310.88720.88730.72150.9217bpred_bimod.bpred_dir_rate0.66490.56850.88610.90000.90160.73560.9331bpred_bimod.bpred_jr_rate1.00001.00000.99580.99580.99580.99850.9958bpred_bimod.bpred_jr_non_ras_rate.PP1.00001.00000.68290.68290.68290.682
16、90.6829bpred_bimod.retstack_pushes0035043504350435043504bpred_bimod.retstack_pops0035023502350235023502bpred_bimod.used_ras.PP0035023502350235023502bpred_bimod.ras_hits.PP0035003500350035003500bpred_bimod.ras_rate.PPError:divide by zeroError:divid by zero0.99940.99940.99940.99940.9994 根据得到的统计数据
17、得知,在上述的分支预测器配置中,复合式的地址预测命中率与分支方向预测命中率最高。代码分析在sim-bpred.c中检查了输入的动态预测方法选项,并创建了相应的分支预测器。sim_check_options(struct opt_odb_t *odb, int argc, char *argv)函数中: if (!mystricmp(pred_type, "taken") /创建预测器实例 bpred = bpred_create(BPredTaken, 0, 0, 0, 0, 0, 0, 0
18、, 0, 0); 在sim_main函数中: while (TRUE) regs.regs_RMD_REG_ZERO = 0;#ifdef TARGET_ALPHA regs.regs_F.dMD_REG_ZERO = 0.0;#endif /* 获取下一条指令*/ MD_
19、FETCH_INST(inst, mem, regs.regs_PC); /* 指令计数 */ sim_num_insn+; /* set default reference address and access mode */ addr = 0; is_write = FALSE; /
20、* set default fault - none */ fault = md_fault_none; /* 对指令译码 */ MD_SET_OPCODE(op, inst); /* 执行指令 */ switch (op)#define DEFINST(OP,MSK,NAM
21、E,OPFORM,RES,FLAGS,O1,O2,I1,I2,I3) case OP:
22、0;
23、160; SYMCAT(OP,_IMPL);
24、160; break;#define DEFLINK(OP,MSK,NAME,MASK,SHIFT)
25、160; case OP:
26、0;
27、60; panic("attempted to execute a linking opcode");#define CONNECT(OP)#define DECLARE_FAULT(FAULT)
28、; fault = (FAULT); break; #include "machine.def
29、" default: panic("attempted to execute a bogus o
30、pcode"); if (fault != md_fault_none)fatal("fault (%d) detected 0x%08p", fault, regs.regs_PC); if (MD_OP_FLAGS(op) & F_MEM) sim_num_refs+;
31、; if (MD_OP_FLAGS(op) & F_STORE) is_write = TRUE; if (MD_OP_FLAGS(op) & F_CTRL)
32、; md_addr_t pred_PC; struct bpred_update_t update_rec; sim_num_branches+; if (pr
33、ed)/ 如果分支预测器创建成功 /* 获取预测的下条指令的地址 */ pred_PC = bpred_lookup(pred,
34、0; /* 分支地址*/regs.regs_PC,
35、0; /*目的地址 */target_PC, &
36、#160; /* 指令操作码 */op,
37、60; /* call? */MD_IS_CALL(op),
38、; /* return? */MD_IS_RETURN(op),
39、60; /* stash an update ptr */&update_rec,
40、160; /* stash return stack ptr */&stack_idx); /* 判断从分支预测器返回的下条指令地址是否合法 */ if (!pred_PC)/ 不合法,(当返回0时,表示采用分支不转移预测) &
41、#160; /* 分支不转移,pc直接加一 */
42、0; pred_PC = regs.regs_PC + sizeof(md_inst_t); /* 根据指令执行的实际结果,来更新分支预测器*/
43、0; bpred_update(pred, /* 分支地址 */regs.regs_PC,
44、 /* resolved branch target */regs.regs_NPC,
45、0; /* 分支是否转移 */regs.regs_NPC != (regs.regs_PC +
46、 sizeof(md_inst_t),
47、; /* pred taken? */pred_PC != (regs.regs_PC +
48、160; sizeof(md_inst_t), /* correct pred? */pred_PC = regs.regs_NPC,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学化学分析考试题及答案
- 成都二类考试题库及答案
- 办公室档案考试题及答案
- 2025年金融科技企业估值模型构建与投资决策策略创新实践
- 2025年金融机构风险管理数字化转型中的金融科技风险管理策略优化案例报告
- 2025届广东执信中学高二下化学期末考试模拟试题含解析
- 直播带货公司商品秒杀审批制度
- 2025届江苏省无锡市石塘湾中学化学高一下期末教学质量检测试题含解析
- 2025年航空货运市场竞争格局演变与发展策略研究报告
- 2025年航空航天零部件制造高精度加工技术市场前景分析与预测报告
- 年产5万吨趣味酥性饼干生产车间设计
- RFJ013-2010 人民防空工程防化设计规范
- 柳州某医院空气源热泵热水系统设计案例
- 西师大版六年级数学下册第四单元 扇形统计图 单元概述和课时安排
- 高中英语全国高考考纲词汇3600汇总
- 《中越传统节日对比问题研究5100字【论文】》
- 特劳特战略定位总裁课程课件
- 《 民航服务心理学》考试题及参考答案
- 2021学堂在线网课《生活英语读写》课后作业单元考核答案
- 中国近现代史纲要超星尔雅答案贵州大学-
- Q∕GDW 12162-2021 隔离开关分合闸位置双确认系统技术规范
评论
0/150
提交评论