cache性能分析及优化实验报告Word文档下载推荐.docx
《cache性能分析及优化实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《cache性能分析及优化实验报告Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
![cache性能分析及优化实验报告Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/25/6592f4a4-84d4-4f28-b267-c4b5c0af3dae/6592f4a4-84d4-4f28-b267-c4b5c0af3dae1.gif)
国防科学技术大学训练部制
《实验报告》填写说明
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<
stdio.h>
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参数配置命令为:
<
name>
:
nsets>
bsize>
assoc>
repl>
其中:
:
Cache的名称,其中:
dl1:
一级数据Cache
dl2:
二级数据Cache
il1:
一级指令Cache
il2:
二级指令Cache
dtlb:
数据TLB
itlb:
指令TLB
组的数目
:
块大小
-:
相联度
替换策略
此时,Cache容量为:
*<
替换策略主要有以下几种:
l:
LRU,最近最少使用
f:
FIFO,先进先出
r:
RANDOM,随机策略
例如:
-c