cache性能分析及优化实验报告.docx

上传人:b****8 文档编号:23539172 上传时间:2023-05-18 格式:DOCX 页数:27 大小:495.59KB
下载 相关 举报
cache性能分析及优化实验报告.docx_第1页
第1页 / 共27页
cache性能分析及优化实验报告.docx_第2页
第2页 / 共27页
cache性能分析及优化实验报告.docx_第3页
第3页 / 共27页
cache性能分析及优化实验报告.docx_第4页
第4页 / 共27页
cache性能分析及优化实验报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

cache性能分析及优化实验报告.docx

《cache性能分析及优化实验报告.docx》由会员分享,可在线阅读,更多相关《cache性能分析及优化实验报告.docx(27页珍藏版)》请在冰豆网上搜索。

cache性能分析及优化实验报告.docx

cache性能分析及优化实验报告

 

实验报告

 

实验名称:

计算机原理cache性能分析及优化实验

 

学员:

张英杰学号:

************

培养类型:

4+1军人年级:

任职培训队

专业:

计算机科学与技术所属学院:

计算机学院

指导教员:

唐玉华职称:

研究员

实验室:

校计算机中心四号院机房实验日期:

2010.12.1—2010.12.19

国防科学技术大学训练部制

 

《实验报告》填写说明

1.学员完成人才培养方案和课程标准要所要求的每个实验后,均须提交实验报告。

2.实验报告封面必须打印,报告内容可以手写或打印。

3.实验报告内容编排及打印应符合以下要求:

(1)采用A4(21cm×29.7cm)白色复印纸,单面黑字打印。

上下左右各侧的页边距均为3cm;缺省文档网格:

字号为小4号,中文为宋体,英文和阿拉伯数字为TimesNewRoman,每页30行,每行36字;页脚距边界为2.5cm,页码置于页脚、居中,采用小5号阿拉伯数字从1开始连续编排,封面不编页码。

(2)报告正文最多可设四级标题,字体均为黑体,第一级标题字号为4号,其余各级标题为小4号;标题序号第一级用“一、”、“二、”……,第二级用“

(一)”、“

(二)”……,第三级用“1.”、“2.”……,第四级用“

(1)”、“

(2)”……,分别按序连续编排。

(3)正文插图、表格中的文字字号均为5号。

一实验概述

(一)实验目的

1.掌握Cache的基本概念、基本组织结构

2.掌握影响Cache性能的三个指标

3.了解相联度对Cache的影响

4.了解块大小对Cache的影响

5.了解替换算法对Cache的影响

6.了解Cache失效的分类及组成情况

7.了解一些基本的Cache性能优化方法(选做)

(二)实验步骤

1.运行模拟器SimpleScalar

2.在基本配置情况下运行矩阵乘计算程序统计Cache失效次数,并统计三种

不同类型的失效

3.改变Cache容量,统计各种失效的次数,并进行分析

4.改变Cache的相联度,统计各种失效的次数,并进行分析

5.改变Cache块大小,统计各种失效的次数,并进行分析

6.改变Cache的替换策略,统计各种失效次数,并分析

7.对给出的矩阵乘计算程序进行适当改写以优化cache性能。

(选做)

(三)实验平台

Vmware虚拟机,redhat9.0linux操作系统,SimpleScalar模拟器。

(四)实验课时

3课时

(五)参考资料

计算机体系结构教材、SimpleScalar模拟器使用指南等

二背景知识

(一)Cache基本知识

(1)可以从三个方面改进Cache的性能:

降低失效率、减少失效开销、减少Cache命中时间;

(2)按照产生失效的原因不同,可以把Cache失效分为三类:

1)强制性失效(Compulsorymiss)

当第一次访问一个块时,该块不在Cache中,需从下一级存储器中调入Cache,这就是强制性失效。

这种失效也称为冷启动失效或首次访问失效。

2)容量失效(Capacitymiss)

如果程序执行时所需的块不能全部调入Cache中,则当某些块被替换后,若又重新被访问,就会发生失效。

这种失效称为容量失效。

3)冲突失效(Conflictmiss)

在组相联或直接映象Cache中,若太多的块映象到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的组或块有空闲位置),然后又被重新访问的情况。

这就是发生了冲突失效。

这种失效也称为碰撞失效(collision)或干扰失效(interference)。

(3)降低Cache失效率的方法:

增加Cache块大小、提高相联度、VictimCache、伪相联Cache、硬件预取技术、由编译器控制的预取和编译器优化。

(4)替换算法

1)先进先出法(FIFO)

2)随机法:

为了均匀使用一组中的各块,这种方法随机地选择被替换的块。

3)最近最少使用法LRU(LeastRecentlyUsed):

选择近期最少被访问的块作为被替换的块。

但由于实现比较困难,现在实际上实现的LRU都只是选择最久没有被访问过的块作为被替换的块。

(二)SimpleScalar简介及使用

SimpleScalar是上世纪由威斯康辛大学发布的一款开源模拟器,具备良好的可移植性和可扩展性。

SimpleScalar在学术界具有十分重要的影响力,根据其官方网站统计,2000-2002年体系结构顶级会议中有一半以上的研究者采用该模拟器来评估他们的研究成果。

作为一款时钟精确的模拟器,SimpleScalar采用执行驱动方式模拟,包含功能模拟和性能模拟。

SimpleScalar的指令集架构采用C语言宏声明,目前3.0版本主要支持PISA指令集和Alpha指令集。

根据模拟的目的不同,SimpleScalar包含多个模拟器实体,从最简单的Sim-fast到最为复杂的Sim-outorder,可分别用于功能模拟、Cache配置策略、流水线、前瞻预测等体系结构问题的全面研究。

同时,随着SimpleScalar一起发布的还有一系列工具链(交叉编译器,汇编器,流水线跟踪器等),他们与SimpleScalar的交互过程如图4.1所示。

Fortran代码需要先由F2C工具转换为标准C代码,交叉编译器则将标准C代码编译为模拟器后端指令集下的二进制代码,交由模拟器执行模拟,通过这些交互最终实现一个完整的模拟平台。

 

图1SimpleScalar模拟流程

1.编写测试程序

#include

intmain()

{

printf("Helloworld!

\n");

return0;

}

2.编译程序

sslittle-na-sstrix-gcchello.c

含义:

用simplescalar的编译器对hello.c进行编译,以生成能够在模拟器中运行的可执行文件,此条命令将hello.c编译成a.out.这种可执行文件并不是通常意义下的可执行文件,它的可执行性是相对于模拟器程序而已的。

(在这里我们猜测生成的可执行文件默认为a.out,a.out是默认生成的。

3.模拟运行

sim-safea.out

含义:

用sim-safe对a.out进行模拟运行。

Sim-safe是simplescalar中的一个模拟器,它会在指令的执行时检查指令的齐整性,检查访存指令的合法性等一些安全性检查。

SimpleScalar包含多个模拟器,复杂度由最简单的Sim-safe到最复杂的Sim-outordor,下面简要介绍这些模拟器。

(1)Sim-fast

Sim-fast是执行速度最快,最不关心模拟过程细节信息的子模拟器程序。

它采用顺序执行指令的方式,没有指令并行;不支持cache的使用,也不进行指令正确性检查,由程序员保证每条指令的正确性;不支持模拟器本身内嵌的Dlite!

调试器(类似于gdb调试器)。

为了模拟器的速度优化,在缺省情况下,sim-fast模拟器不进行时间统计,不对指令的有关信息(如指令总数及访存指令数目)进行统计。

当然,可以修改模拟器源程序,通过改变其设置,使模拟器更加符合设计人员的需求。

(2)Sim-safe

在工具集中,是最简单的最友好的模拟器,检查所有的指令错误,不讲究速度。

(3)Sim-bpred

实现一个分支预测分析器。

(4)Sim-cache

这个工具实现cache模拟功能,为用户择的cache和快表设置生成cache统计,其中可能包含两级指令和数据cache,还有一级指令和数据快表,不会生成时间信息。

(5)Sim-eio

这个模拟器支持生成外部事件跟踪(EIOtraces)和断点文件。

外部事件跟踪俘获程序的执行,并且允许被打包到一个单独的文件,以备以后的再次执行。

这个模拟器也提供在外部事件跟踪执行中在任意一点做断点。

断点文件可被用于在程序运行中启动simplescalar模拟器。

(6)Sim-outorder

最完整的工具。

支持依序和乱序执行,branchpredictor,memoryhierarchy,functionunit个数等参数设定。

这个模拟器追踪潜在的所有流水(pipeline)操作。

(7)Sim-profile

也叫functionalsimulation,但提供较完整的模拟参数,可依照使用者之设定,决定所要模拟之项目,如instructionclassesandaddresses、textsymbols、memoryaccesses、branchesanddatasegmentsymbols以方便使用者整理收集数据材料。

三实验内容

(一)SimpleScalar基本运行模拟

开启虚拟机软件Vmware,点击菜单“Flie->Open”,打开目录”D:

\RedHatLinux\”下的RedHat虚拟机。

该虚拟机的用户名和密码如下:

用户名为:

root

密码:

123456

其中,SimpleScalar模拟器安装在目录/root/SimpleScalar下,test目录为矩阵乘测试程序所在目录

点击右键->新建终端,进入目录/root/SimpleScalar/test/目录,命令为:

[root@localhostroot]#cd/root/simplescalar/test/

1.编译测试程序

该目录下有一个1.c文件,该文件为矩阵乘测试程序文件,首先需要使用SimpleScalar的交叉编译器将该文件便以为SimpleScalar模拟器上可以执行的二进制文件,编译命令为:

[root@localhosttest]#sslittle-na-sstrix-gcc1.c

此时该目录下会多出来一个a.out文件,该文件即为SimpleScalar上可执行二进制文件。

2.模拟执行

我们采用SimpleScalar的sim-cache模拟器对刚才编译出来的可执行文件进行模拟执行,最简单的执行命令为:

[root@localhosttest]#sim-cachea.out

如果执行成功,会出现如下图所示的界面:

此时输入三个矩阵A,B,C的大小M、N、K,得到模拟执行结果,如下图所示:

3.Cache配置

在上述的执行中,没有对Cache的结构进行配置,使用了默认的Cache配置。

在我们的实验中,需要对Cache参数进行详细配置。

一般来说,Cache的结构参数主要包括以下几个方面:

容量、块大小、相联度、替换算法等。

在SimpleScalar模拟器中,采用了两级Cache结构,同时数据和指令Cache分开。

SimpleScalar的Cache参数配置命令为:

:

:

:

:

其中:

Cache的名称,其中:

dl1:

一级数据Cache

dl2:

二级数据Cache

il1:

一级指令Cache

il2:

二级指令Cache

dtlb:

数据TLB

itlb:

指令TLB

组的数目

块大小

-:

相联度

-:

替换策略

此时,Cache容量为:

**

替换策略主要有以下几种:

l:

LRU,最近最少使用

f:

FIFO,先进先出

r:

RANDOM,随机策略

例如:

-cache:

dl1dl1:

1024:

32:

2:

l

表示对一级数据cache进行配置,1024表示有1024组,Cache块大小为32个byte,每个组有2个Cache块,即相联度为2,替换策略为LRU。

在此配置下,一级数据Cache的容量为1024*32*2=64Kbyte。

例如对上述矩阵乘测试程序,使用该配置进行模拟执行的命令为:

[root@localhosttest]#sim-cache-cache:

dl1dl1:

1024:

32:

2:

la.out

(二)SimpleScalar模拟统计信息详解

采用上述命令执行后,得到如下所示的信息,其详解如下:

[root@localhosttest]#sim-cache-cache:

dl1dl1:

1024:

32:

2:

la.out

sim-cache:

SimpleScalar/PISAToolSetversion3.0ofAugust,2003.

Copyright(c)1994-2003byToddM.Austin,Ph.D.andSimpleScalar,LLC.

AllRightsReserved.ThisversionofSimpleScalarislicensedforacademic

non-commercialuse.Noportionofthisworkmaybeusedbyanycommercial

entity,orforanycommercialpurpose,withoutthepriorwrittenpermission

ofSimpleScalar,LLC(*********************).

sim:

commandline:

sim-cache-cache:

dl1dl1:

1024:

32:

2:

la.out

sim:

simulationstarted@SunNov2822:

49:

412010,optionsfollow:

sim-cache:

Thissimulatorimplementsafunctionalcachesimulator.Cache

statisticsaregeneratedforauser-selectedcacheandTLBconfiguration,

whichmayincludeuptotwolevelsofinstructionanddatacache(withany

levelsunified),andonelevelofinstructionanddataTLBs.Notiming

informationisgenerated.

#-config#loadconfigurationfromafile

#-dumpconfig#dumpconfigurationtoafile

#-hfalse#printhelpmessage

#-vfalse#verboseoperation

#-dfalse#enabledebugmessage

#-ifalse#startinDlitedebugger

-seed1#randomnumbergeneratorseed(0fortimerseed)

#-qfalse#initializeandterminateimmediately

#-chkpt#restoreEIOtraceexecutionfrom

#-redir:

sim#redirectsimulatoroutputtofile(non-interactiveonly)

#-redir:

prog#redirectsimulatedprogramoutputtofile

-nice0#simulatorschedulingpriority

-max:

inst0#maximumnumberofinst'stoexecute

-cache:

dl1dl1:

1024:

32:

2:

l#l1datacacheconfig,i.e.,{|none}

-cache:

dl2ul2:

1024:

64:

4:

l#l2datacacheconfig,i.e.,{|none}

-cache:

il1il1:

256:

32:

1:

l#l1instcacheconfig,i.e.,{|dl1|dl2|none}

-cache:

il2dl2#l2instructioncacheconfig,i.e.,{|dl2|none}

-tlb:

itlbitlb:

16:

4096:

4:

l#instructionTLBconfig,i.e.,{|none}

-tlb:

dtlbdtlb:

32:

4096:

4:

l#dataTLBconfig,i.e.,{|none}

-flushfalse#flushcachesonsystemcalls

-cache:

icompressfalse#convert64-bitinstaddressesto32-bitinstequivalents

#-pcstat#profilestat(s)againsttextaddr's(multusesok)

Thecacheconfigparameterhasthefollowingformat:

:

:

:

:

-nameofthecachebeingdefined

-numberofsetsinthecache

-blocksizeofthecache

-associativityofthecache

-blockreplacementstrategy,'l'-LRU,'f'-FIFO,'r'-random

Examples:

-cache:

dl1dl1:

4096:

32:

1:

l

-dtlbdtlb:

128:

4096:

32:

r

Cachelevelscanbeunifiedbypointingaleveloftheinstructioncache

hierarchyatthedatacachehiearchyusingthe"dl1"and"dl2"cache

configurationarguments.Mostsensiblecombinationsaresupported,e.g.,

Aunifiedl2cache(il2ispointedatdl2):

-cache:

il1il1:

128:

64:

1:

l-cache:

il2dl2

-cache:

dl1dl1:

256:

32:

1:

l-cache:

dl2ul2:

1024:

64:

2:

l

Or,afullyunifiedcachehierarchy(il1pointedatdl1):

-cache:

il1dl1

-cache:

dl1ul1:

256:

32:

1:

l-cache:

dl2ul2:

1024:

64:

2:

l

sim:

**startingfunctionalsimulationw/caches**

PleaseinputthevalueofM,N,K(whichmustbeintnumbers):

M=2

N=3

K=4

MatrixA:

2*3

222

222

MatrixB:

3*4

2222

2222

2222

MatrixC:

3*4

12121212

12121212

sim:

**simulationstatistics**

sim_num_insn105663#totalnumberofinstructionsexecuted总模拟指令条数

sim_num_refs34213#totalnumberofloadsandstoresexecuted所有的访存指令条数

sim_elapsed_time200#totalsimulationtimeinseconds总的模拟时钟周期数

sim_inst_rate528.3150#simulationspeed(ininsts/sec)模拟速度

il1.accesses105663#totalnumberofaccesses一级指令cache的访问数目

il1.hits90939#totalnumberofhits一级指令cache的命中数目

il1.misses14724#totalnumberofmisses一级指令cache的实效数目

il1.replacements14468#totalnumberofreplacements一级指令cache上发生替换的数目

il1.writebacks0#totalnumberofwritebacks一级指令cache上发生写回的数目

il1.invalidations0#totalnumberofinvalidations一级指令cache上访存无效的数目

il1.miss_rate0.1393#missrate(i.e.,misses/ref)一级指令cache上的失效率

il1.repl_rate0.1369#replacementrate(i.e.,repls/ref)一级指令cache上的替换概率

il1.wb_rate0.0000#writebackrate(i.e.,wrbks/ref)一级指令cache上的写回概率

il1.inv_rate0.0000#invalidationrate(i.e.,invs/ref)一级指令cache上的无效概率

dl1.accesses34648#totalnumberofaccesses一级数据cache上的总访问数目

dl1.hits33972#totalnumberofhits一级数据cache上的命中次数

dl1.misses676#totalnumberofmisses一级数据cache上的实效次数

dl1.replacements1#totalnumberofreplacements一级数据cache上发生替换的次数

dl1.writebacks0#totalnumberofwritebacks一级数据cache上发生写回的次

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

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1