[工学]计算机体系结构实验教程.doc

上传人:sccc 文档编号:4533592 上传时间:2023-04-26 格式:DOC 页数:79 大小:1.10MB
返回 下载 相关 举报
[工学]计算机体系结构实验教程.doc_第1页
第1页 / 共79页
[工学]计算机体系结构实验教程.doc_第2页
第2页 / 共79页
[工学]计算机体系结构实验教程.doc_第3页
第3页 / 共79页
[工学]计算机体系结构实验教程.doc_第4页
第4页 / 共79页
[工学]计算机体系结构实验教程.doc_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《[工学]计算机体系结构实验教程.doc》由会员分享,可在线阅读,更多相关《[工学]计算机体系结构实验教程.doc(79页珍藏版)》请在三一办公上搜索。

1、 山东大学软件学院 计算机体系结构实验指导书 计算机体系结构实 验 指 导 书山东大学软件学院 软件学院2010-7月目录第一章 SimpleScalar介绍51.1 计算机体系结构的概念51.2 Simplescalar模拟器简介51.3 SimpleScalar仿真介绍61.4 SimpleScalar的目录结构9第二章 实验1:SimpleScalar的安装与配置112.1 实验摘要112.2 实验目的112.3 实验步骤112.3.1 SimpleScalar的安装112.3.2. mp_simplesim的安装142.4 SimpleScalar主要部件192.5关于Mibench-

2、auotomotive基准测试包的简要说明19第三章 实验2:5级超标量流水线213.1实验摘要213.2实验目的213.3实验原理213.4实验步骤233.5实验报告233.6代码分析233.7实验扩展26第四章 实验3:动态分支预测274.1实验摘要274.2实验目的274.3实验原理274.4实验步骤284.5实验报告294.6代码分析304.7实验扩展33第五章 实验4:乱序执行345.1实验摘要345.2实验目的345.3实验原理345.4实验步骤345.5实验报告345.6代码分析345.7实验扩展36第六章 实验5:推断执行376.1实验摘要376.2实验目的376.3实验原理3

3、76.4实验步骤376.5实验报告386.6代码分析386.7实验扩展39第七章 实验6:Cache性能分析407.1实验摘要407.2实验目的407.3实验原理407.4实验步骤417.5实验报告417.6代码分析417.7实验扩展43第八章 实验7:虚拟cache448.1实验摘要448.2实验目的448.3实验原理448.4实验步骤448.5实验报告448.6代码分析458.7实验扩展45第九章 实验8:伪相联cache469.1实验摘要469.2实验目的469.3实验原理469.4实验步骤469.5实验报告469.6代码分析469.7实验扩展47第十章 实验9:线程级并行4810.1实

4、验摘要4810.2实验目的4810.3实验原理4810.4实验步骤4810.5实验报告4910.6代码分析4910.7实验扩展52第十一章 实验10:多处理器的存储5311.1实验摘要5311.2实验目的5311.3实验原理5311.4实验步骤5311.5实验报告5311.6代码分析5311.7实验扩展62第十二章 实验11:线程同步6312.1实验摘要6312.2实验目的6312.3实验原理6312.4实验步骤6312.5实验报告6312.6代码分析6312.7实验扩展66第十三章 开放实验1:指令集设计6713.1实验摘要6713.2实验目的6713.3实验原理6713.4实验步骤6713

5、.5实验报告6913.6代码分析6913.7实验扩展69第十四章 开放实验2:cache 优化7014.1实验摘要7014.2实验目的7014.3实验原理7014.4实验步骤7014.5实验报告7014.6代码分析7014.7实验扩展74第十五章 开放实验3:流水线改进7515.1实验摘要7515.2实验目的7515.3实验原理7515.4实验步骤7515.5实验报告7515.6代码分析7515.7实验扩展79第一章 SimpleScalar介绍在本书中将使用体系结构模拟器SimpleScalar作为我们的实验平台。本章的内容包括:SimpleScalar的体系结构,SimpleScalar的

6、各种部件或功能仿真,以及SimpleScalar的目录结构。通过本章的学习,读者能够对SimpleScalar有一个初步的认识,有助于后续实验的进行。1.1 计算机体系结构的概念关于“计算机体系结构(computer architecture)” 经典的定义是1964年C.M.Amdahl在介绍IBM 360系统时提出的,其具体描述为“计算机体系结构是程序员所看到的计算机的属性,即概念性结构与功能特性”。计算机体系结构也称作计算机系统结构,研究的是软、硬件之间的功能分配以及对传统机器机界面的确定,提供机器预言、汇编语言程序设计者或编译程序生成系统为使其设计或生成的程序能在机器上正确运行应看到和

7、遵循的计算机属性,在此不再赘述。 1.2 Simplescalar模拟器简介SimpleScalar 模拟器是一个超标量、5级流水的RISC体系结构模拟器,提供了从最简单到超标量乱序发射的不同的模拟程序。SimpleScalar工具集起源于80年代中后期由Manoj Franklin开发的模拟工具。1995年夏,Steve Bennett开发了SimpleScalar x86工具。SimpleScalar模拟器由Intel公司微型计算机研究室的Todd M. Austin在1996年最终编写而成,美国麦迪逊威斯康星大学计算机学院的Doug Burger参与开发和文档整理工作,二人共同拥有该模拟

8、器的版权。Austin与Bennett两人都是威斯康星大学计算机学院的助手,由Guri Sohi教授指导研究工作。SimpleScalar模拟器在功能级上实现了执行驱动、解释执行,在行为级上实现了流水线模拟。该工具集提供了一个以GCC为主的编译器以及相关组件,能够产生基于SimpleScalar体系结构的目标代码,然后在SimpleScalar模拟器上运行。 运行模拟器时,主程序main( )做所有的初始化工作,并将二进制目标码载入内存,然后调用sim_main(),sim_main()在每个模拟器中单独说明,预先译码整个正文段,加快模拟。然后开始目标程序的模拟。1.3 SimpleScala

9、r仿真介绍SimpleScalar 模拟器提供了从最简单到超标量乱序发射的不同的模拟程序。如1.2节所示,其中sim-outorder模拟器模拟的是一个超标量,5级流水的RISC体系结构的CPU模型:分为取指(instruction fetch)、译码(decode)、执行(execute)、存储(store)和回写(write back)五个阶段,而乱序过程比五级流水线多了一个提交段(commit)。以下是在simplesim-3.0中所有模拟器通用的参数:-config从文件中装载配置-dumpconfig将配置信息导出至文件-h显示帮助信息-d启用调试信息-i在Dlite!调试器中开始执

10、行(sim-fast不支持)-q立即退出-seed【整数】随机数生成器的计时器种参数,默认为1-chkpt【文件名】从【文件名】中恢复EIO trace的执行-redir:sim【文件路径】模拟器输出重定向至文件-redir:prog【文件路径】模拟程序输出重定向至文件-nice【整数】模拟器调度优先级,默认为0SimpleScalar v3.0提供的几个模拟程序如下:(1)Sim-fastSim-fast是执行速度最快,最不关心模拟过程细节信息的子模拟器程序。它采用顺序执行指令的方式,没有指令并行;不支持cache的使用,也不进行指令正确性检查,由程序员保证每条指令的正确性;不支持模拟器本身

11、内嵌的Dlite!调试器(类似于gdb调试器)。为了模拟器的速度优化,在缺省情况下,sim-fast模拟器不进行时间统计,不对指令的有关信息(如指令总数及访存指令数目)进行统计。当然,可以修改模拟器源程序,通过改变其设置,使模拟器更加符合设计人员的需求。(2)Sim-safe在工具集中,是最简单的最友好的模拟器,在sim-fast的基础上添加了Dlite!调试支持,检查所有的指令错误,不讲究速度。(3)Sim-bpred实现一个分支预测(branch prediction,也称作跳转预测)分析器,可采用五种分支预测方式:nottaken, taken, bimod, 2lev, comb。特有

12、参数:-bpred # bimod # branch predictor type nottaken|taken|bimod|2lev|comb-bpred:bimod # 2048 # bimodal predictor config ()-bpred:2lev # 1 1024 8 0 # 2-level predictor config ( )-bpred:comb # 1024 # combining predictor config ()-bpred:ras # 8 # return address stack size (0 for no return stack)-bpred:b

13、tb # 512 4 # BTB config ( )(4)Sim-cache & sim-cheetahSim-cache实现cache模拟功能,为用户选择的cache和快表(TLB, translation lookaside buffer)设置生成cache统计,其中可能包含两级指令和数据cache ,还有一级指令和数据快表,不会生成时间信息。另外,实现cache模拟功能的还有sim-cheetah,能够有效地模拟全相联cache,并能同时生成各种cache set数配置下的cache统计量。同样地,sim-cheetah不会生成时间信息。特有参数:Sim-cache:-cache:dl

14、1 # dl1:256:32:1:l # l1 data cache config, i.e., |none-cache:dl2 # ul2:1024:64:4:l # l2 data cache config, i.e., |none-cache:il1 # il1:256:32:1:l # l1 inst cache config, i.e., |dl1|dl2|none-cache:il2 # dl2 # l2 instruction cache config, i.e., |dl2|none-tlb:itlb # itlb:16:4096:4:l # instruction TLB c

15、onfig, i.e., |none-tlb:dtlb # dtlb:32:4096:4:l # data TLB config, i.e., |none-flush # false # flush caches on system calls-cache:icompress # false # convert 64-bit inst addresses to 32-bit inst equivalents-pcstat # # profile stat(s) against text addrs (mult uses ok)Sim-cheetah:-refs #data # referenc

16、e stream to analyze, i.e., none|inst|data|unified-R #lru # replacement policy, i.e., lru or opt-C # sa # cache configuration, i.e., fa, sa, or dm-a # 7 # min number of sets (log base 2, line size for DM)-b # 14 # max number of sets (log base 2, line size for DM)-l # 4 # line size of the caches (log

17、base 2)-n # 1 # max degree of associativity to analyze (log base 2)-in # 512 # cache size intervals at which miss ratio is shown-M #524288 # maximum cache size of interest-c #16 # size of cache (log base 2) for DM analysis(5)Sim-eio 这个模拟器支持生成外部输入/输出跟踪(EIO traces)和断点文件。外部事件跟踪俘获程序的执行,并且允许被打包到一个单独的文件,以

18、备以后的再次执行。这个模拟器也提供在外部事件跟踪执行中在任意一点做断点。断点文件可被用于在程序运行中启动simplescalar 模拟器。特有参数:-fastfwd # 0 # number of insts skipped before tracing starts-trace # # EIO trace file output file name-perdump # # periodic checkpoint every n instructions: -dump # # specify checkpoint file and trigger: (6)Sim-outorder最完整的工具,

19、前文中已提到。支持依序和乱序执行,branch predictor,memory hierarchy,function unit个数等参数设定。这个模拟器追踪潜在的所有流水(pipeline)操作。特有参数:-fetch:ifqsize #4 # instruction fetch queue size (in insts)-fetch:mplat #3 # extra branch mis-prediction latency-fetch:speed # 1 # speed of front-end of machine relative to execution core-decode:w

20、idth # 4 # instruction decode B/W (insts/cycle)-issue:width #4 # instruction issue B/W (insts/cycle)-issue:inorder # false # run pipeline with in-order issue-issue:wrongpath # true # issue instructions down wrong execution paths-commit:width # 4 # instruction commit B/W (insts/cycle)-ruu:size # 16 #

21、 register update unit (RUU) size-lsq:size #8 # load/store queue (LSQ) size-mem:lat # 18 2 # memory access latency ( )-mem:width #8 # memory access bus width (in bytes)-tlb:itlb # itlb:16:4096:4:l # instruction TLB config, i.e., |none-tlb:dtlb # dtlb:32:4096:4:l # data TLB config, i.e., |none-tlb:lat

22、 # 30 # inst/data TLB miss latency (in cycles)-res:ialu # 4 # total number of integer ALUs available-res:imult #1 # total number of integer multiplier/dividers available-res:memport #2 # total number of memory system ports available (to CPU)-res:fpalu #4 # total number of floating point ALUs availab

23、le-res:fpmult #1 # total number of floating point multiplier/dividers available-bugcompat # false # operate in backward-compatible bugs mode (for testing only)(7)Sim-profile 也叫functional simulation,但提供较完整的模拟参数,可依照使用者之设定,决定所要模拟的统计量,如instruction classes and addresses、text symbols、memory accesses、branc

24、hes and data segment symbols等,以方便使用者整理收集数据材料。特有参数:-all # false # enable all profile options-iclass # false # enable instruction class profiling-iprof # false # enable instruction profiling-brprof # false # enable branch instruction profiling-amprof # false # enable address mode profiling-segprof # f

25、alse # enable load/store address segment profiling-tsymprof # false # enable text symbol profiling-taddrprof # false # enable text address profiling-dsymprof # false # enable data symbol profiling-internal # false # include compiler-internal symbols during symbol profiling-pcstat # # profile stat(s)

26、 against text addrs (mult uses ok)图1.2 SimpleScalar的模拟器结构1.4 SimpleScalar的目录结构如图1.2所示,Simplesim-3.0模拟器包(含cheetah)包括以下几部分内容:(1)模拟器模块(simulator modules),包括:sim-bpred.c,sim-cache.c,sim-cheetah.c,sim-eio.c,sim-fast.c,sim-outorder.c,sim-profile.c,及sim-safe.c,其功能已在1.3节中介绍完毕;(2)模拟组件(simulation components),

27、包括:bpred.h,c 分支(跳转)预测器;cache.h,c cache模块;eventq.h,c 事件队列模块;libcheetah/ Cheetah cache 模拟器支持库;ptrace.h,c 流水线轨迹模块;res.h,c 资源管理器模块;sim.h 模拟器主体代码接口定义;textprof.pl 代码段属性视图 (Perl Script);pipeview.pl 流水线轨迹视图 (Perl script);(3)系统组件(system components),包括:dlite.h,c - DLite!, 轻量级调试程序;eio.h,c 外部 I/O 追踪模块;loader.h,

28、c 程序载入器;memory.h,c 平面存储器空间模块;regs.h,c 寄存器模块;machine.h,c 目标机及ISA依赖的例行程序;machine.def SimpleScalar ISA 定义;symbol.h,c 符号表模块;syscall.h,c 代理系统调用实现;(4)辅助模块(“very useful” modules),包括:eval.h,c 一般表达式验证程序;libexo/ EXO(-skeletal) 持久性数据结构库(由EIO trace使用);misc.h,c 提供一些提示信息函数;options.h,c 选项包;range.h,c 程序范围表达式包;stats

29、.h,c 统计量包;(5)构建组件(building components),包括:Makefile 顶层的构建文件;tests/ 独立自验证大小端模式测试包;endian.h,c 大小端模式探测;main.c 主执行代码;sysprobe.c 系统探测, 构建过程中使用;version.h 模拟器版本验证。第二章 实验1:SimpleScalar的安装与配置2.1 实验摘要1. 安装SimpleScalar PISA版2. 安装SimpleScalar扩展mp_simplesim2.2 实验目的安装实验平台并熟悉实验环境,为今后的学习做准备。2.3 实验步骤2.3.1 SimpleScala

30、r的安装以Ubuntu 9.04系统下为例:(1)首先准备需要的安装文件,如果没有可到以下地址下载:simpletools-2v0.tgz:simplesim-3v0d-with-cheetah.tar.gz:http:/www.ict.kth.se/courses/IS2202/softwaresimpleutils-990811.tar.gz:http:/www.eecs.umich.edu/mirv/softwaregcc-2.7.2.3.ss.tar.gz: http:/american.cs.ucdavis.edu/RAD/gcc-2.7.2.3.ss.tar.gz(2)打开终端,设

31、置环境变量为:(安装目录)$ export IDIR=/home/student/simplescalar(主机)$ export HOST=i686-pc-linux(目标机)$ export TARGET=sslittle-na-sstrix(3)在student主目录下创建目录simplescalar,并将4个安装包移动至该目录:$ mkdir $IDIR$ mv simplesim-3v0d-with-cheetah.tar.gz $IDIR$ mv simpletools-2v0.tgz $IDIR$ mv simpleutils-990811.tar.gz $IDIR$ mv gc

32、c-2.7.2.3.ss.tar.gz $IDIR(4)使用命令更新Ubuntu下的软件包build-essential,flex,bison:$ sudo apt-get install build-essential flex bison再次提醒:用户student的密码为123456。(5)安装SimpleTools:解压包文件,并移除旧的gcc文件夹:$ cd $IDIR$ tar xvfz simpletools-2v0.tgz$ rm -rf gcc-2.6.3(6)安装SimpleUtils:首先解压包文件。$ cd $IDIR$ tar xvfz simpleutils-990

33、811.tar.gz$ cd simpleutils-990811编译前需要修改一处代码错误:在目录simpleutils-990811/ld下找到文件ldlex.l并将所有的yy_current_buffer替换为YY_CURRENT_BUFFER.接下来开始配置,编译:$ ./configure -host=$HOST -target=$TARGET -with-gnu-as -with-gnu-ld -prefix=$IDIR$ make CFLAGS=-O$ make install(7)安装模拟器:$ cd $IDIR$ tar xvfz simplesim-3v0d-with-ch

34、eetah.tar.gz$ cd simplesim-3.0$ make config-pisa$ make测试:$ ./sim-safe tests/bin.little/test-math(8)安装gcc交叉编译器:解压源代码,并配置安装,修改代码文件读写权限:$ cd $IDIR$ tar xvfz gcc-2.7.2.3.ss.tar.gz$ cd gcc-2.7.2.3$ ./configure -host=$HOST -target=$TARGET -with-gnu-as -with-gnu-ld -prefix=$IDIR$ chmod -R +w .接下来,为使编译顺利进行,

35、需要做以下修改:1. 修改Makefile的第130行, 行末添加-I/usr/include;2. 修改protoize.c的第60行, 将“#include ”替换为“#include ”;3.为了解决decl.c的一处错误信息, 名为“invalid lvalue in increment”, 做以下修改: 编辑obstack.h的第341行并将: *(void *)_o-next_free)+=(void *)datum); 替换为: *(void *)_o-next_free+)=(void *)datum); 并运行以下命令:$ cp ./patched/sys/cdefs.h .

36、/sslittle-na-sstrix/include/sys/cdefs.h$ cp ./sslittle-na-sstrix/lib/libc.a ./lib/$ cp ./sslittle-na-sstrix/lib/crt0.o ./lib/接下来构建(build)编译器:$ make LANGUAGES=c CFLAGS=-O CC=gcc -m32这个命令执行后会产生错误信息,可能还需要作如下修改:1. 追加 到insn-output.c的675, 750和823行末尾;2.再次执行“make LANGUAGES.”后,碰到错误buffer overflow,这是由于Ubuntu版

37、本较新造成的。下载以下文件,放在$IDIR/sslittle-na-sstrix/bin下:- http:/www.ict.kth.se/courses/IS2202/ar- http:/www.ict.kth.se/courses/IS2202/ranlib然后,请修改ar及ranlib的权限为可执行,不然会提示“Permission denied”!使用命令:$ chmod +x ar ranlib或在ar及ranlib的属性中修改。3.再次执行“make LANGUAGES.”后,如果需要则删除cxxmain.c的2978-2979行。现在,运行: $ make LANGUAGES=c

38、CFLAGS=-O CC=gcc -m32 $ make enquire $ ./simplesim-3.0/sim-safe ./enquire -f float.h-cross $ make LANGUAGES=c CFLAGS=-O CC=gcc -m32 install这样应该不会产生新的错误了。在一独立的文件夹下,新建hello.c,内容为:#includemain() printf(Hello World!n);然后用如下命令编译:$ $IDIR/bin/sslittle-na-sstrix-gcc -o hello hello.c生成文件hello,可用如下方式运行:$ $IDI

39、R/simplesim-3.0/sim-safe hello如果输出Hello World!,说明安装成功!2.3.2. mp_simplesim的安装1.移动到SimpleScalar安装目录:$ cd simplescalar2.将mp_simplesim.tar.gz解压至该目录:$ tar xvzf mp_simplesim.tar.gz3.进入mp_simplesim目录:$ cd mp_simplesim4.打开Makefile文件,将SS_BIN_PATH设置为交叉编译器的路径:SS_BIN_PATH = /home/student/simplescalar/sslittle-n

40、a-sstrix/bin5.编译:$ make遇到错误提示:syscall.c:102:23: 错误: bsd/sgtty.h:没有该文件或目录将syscall.c第102行中替换为:#include 并保存。6.继续运行make,出现新的错误:syscall.c:823: 错误: TIOCGETP未声明(在此函数内第一次使用)syscall.c:823: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其syscall.c:823: 错误: 所在的函数内也只报告一次。)syscall.c:826: 错误: TIOCSETP未声明(在此函数内第一次使用)将syscall.c的823831行由:/* #if !defined(_CYGWIN32_) */case SS_IOCTL_TIOCGETP: local_req = TIOCGETP; break;case SS_IOC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号