汕头大学实验报告
学院: 工学院系: 计算机系专业: 计算机科学与技术年级: 13实验时间: 2015.6.16 姓名: 林子伦学号: 2013101030实验名称:基于SPIM-CACHE的Cache实验
一.实验目的:
(1)熟悉SPIM-CACHE模拟器环境
(2)深入认识CACHE的工作原理及其作用。
二.实验内容:
(1)阅读实验指导书资料(虚拟教室提供了英文论文的电子版本);
(2)下载SPIM-CACHE软件,理解英文论文的基本内容之后,给出几种典型的cache配置,运行英文论文提供的代码,记录运行时CACHE命中率等重要数据;(3)运行Fig.4代码,了解mapping functions 即映射规则
(4)运行Fig.7代码,了解temporal and spatial locality 即时空局部性,进一步理解cache的工作原理;
(5)运行Fig.8代码,运行学习replacement algorithms 即替代算法,理解其工作原理。
三.实验地点,环境
实验地点:软件工程实验室
实验环境:
操作系统:Microsoft Windows 8 中文版
处理器:Intel(R) Core(TM) i3-3120M CPU @ 2.50GHz 2.50GHz
内存: 4.00GB(3.82GB 可用)
四.实验记录及实验分析(80%):
4.1实验前配置:
1) 按下图配置好Spim设置
2)关于实验中cache设置如下(具体配置根据下面实验要求)
——》
——》
Cache size ——cache大小
Block size ——块大小
Mapping ——组相连
4.2实验一:fig4.s
实验目的:Algorithm and corresponding code to study mapping functions Cache配置:256-B size, 16-B line size, four-way set associative
实验操作:
1) Ctrl+O 打开运行代码fig4.s
代码如下:
.data 0x10000480
Array_A: .word 1,1,1,1,2,2,2,2
.data 0x10000CC0
Array_B: .word 3,3,3,3,4,4,4,4
.text
.globl _start
_start: la $2,Array_A
li $6,0
li $4,8
loop: lw $5,0($2)
add $6,$6,$5
addi $2,$2,4
addi $4,$4,-1
bgt $4,$0,loop
2) 按F5运行程序,得到结果如下图
Instruction cache’s hit rate : 0.792453
Data cache’s hit rate : 0.750000
4.3实验二:fig7.s
实验目的:Algorithm and corresponding code to study temporal and spatial locality
4.3.1 spatial locality
Cache配置:256-B size, four-way set associative, 分别定义block size
为16,8,4B
实验操作:
1) Ctrl+O 打开运行代码fig7.s
代码如下:
.data 0x10000480
Array_A: .word 1,1,1,1,2,2,2,2
.data 0x10000CC0
Array_B: .word 3,3,3,3,4,4,4,4
.text
.globl __start
__start: li $8,1
#这里要得到教程里的0.75,0.5,0 这里的$8里一定要为1
ext_loop: la $2,Array_A
la $3,Array_B
li $6,0 #sum=0
li $4,8 #number of elements
loop: lw $5,0($2)
lw $7,0($3)
add $6,$6,$5 #sum=sum+arrayA[i]
add $6,$6,$7 #sum=sum+arrayB[i]
addi $2,$2,4
addi $3,$3,4
addi $4,$4,-1
addi $8,$8,-1
bgt $8,$0,ext_loop
.end
2)按F5运行程序
Block size:16B
命中率为0.75
Block size:8B
命中率为0.5
Block size:4B
命中率为0
4.3.2 temporal locality
Cache配置:256-B size, 16-B line size, four-way set associative
实验操作:
1) Ctrl+O 打开运行代码fig7.s
代码如下:(代码中N每次改写为1或5或10或100)
.data 0x10000480
Array_A: .word 1,1,1,1,2,2,2,2
.data 0x10000CC0
Array_B: .word 3,3,3,3,4,4,4,4
.text
.globl __start
__start: li $8,N #N=1,5,10,100
ext_loop: la $2,Array_A
la $3,Array_B
li $6,0 #sum=0
li $4,8 #number of elements
loop: lw $5,0($2)
lw $7,0($3)
add $6,$6,$5 #sum=sum+arrayA[i]
add $6,$6,$7 #sum=sum+arrayB[i]
addi $2,$2,4
addi $4,$4,-1
bgt $4,$0,loop
addi $8,$8,-1
bgt $8,$0,ext_loop
.end
2) 按F5运行程序
N=1
命中率为0.759036。
N=5
命中率为0.950860。
N=10
命中率为0.975369。
N=100
命中率为0.997531。
4.4实验三:fig8.s
实验目的:Algorithm and corresponding code provided to work on replacement algorithms and strides.
Cache配置:256-B size, 16-B line, and direct mapped.
实验操作:
1) Ctrl+O 打开运行代码fig8.s
代码如下:
.data 0x10000000
Array_A: .word 0,1,2,3,4,5,6,7,8,9,10,11,...,125,126,127
.text
.globl __start
__start: li $8,100 #external loop
li $3,4 #stride value
li $6,0
sll $9,$3,2
ext_loop: li $5,128
li $4,0
int_loop: lw $7,Array_A($4)
add $6,$6,$7
add $4,$4,$9
sub $5,$5,$3
bgt $5,$0,int_loop
addi $8,$8,-1
bgt $8,$0,ext_loop
.end
五.实验体会(20%)
1. 本次试验对照着英语的教程,尝试的了解并发现了试验教程有些许错误:错误说明
1.1 从右边我们可以看到数组AB都只有8个元素
1.2 所以左边的循环应该一个为循环次数一个为数组个数
1.3 从右边我们可以看到内层循环次数固定为8 外层循环个数不定为N(根据实验要
求为1,5,10,100)
1.4 所以左边的c语言代码应该是
Sum=0;
For(j=0;j<N;j++) //N=1,5,10,100
For(i=0; i<8;i++)
Sum=sum+A[i]+B[i];
2. 本次实验过程中还经常遇到一个问题
无论是哪个程序,都提示在语句__start: 这条语句出现错误,这个问题的解决办法是打开菜单栏Simulator->Settings 红色框内的选项不能打钩
3. 本次实验很好地体会了cache的各种工作,对cache有了更深入的了解,对课程的学习有很大的帮助。