首页 > 技术文章 > 家庭作业6.28+6.37+6.38——20135202、20135220

20135202yjx 2015-11-10 22:49 原文

第六章家庭作业

分值分配

6.28:20135202(1.5) 20135220(0.5)

6.37:20135202(1) 20135220(3)

6.38:20135202(3) 20135220(1)

6.28 分值1分

(1)所有会在组6中命中的十六进制存储器地址:

由习题6.13的表可知,如要命中组六,需要标记位为91,组为6,也就是说八个CT位的值分别为1001 0001,三个CI的值为110,剩下两位是任意的,取值范围为00,01,10,11,所以所有的情况只有四种:

1 0010 0011 1000 = 0x1238

1 0010 0011 1001 = 0x1239

1 0010 0011 1010 = 0x123A

1 0010 0011 1011 = 0x123B

(2)命中组1的:同上题相同,八个CT值分别为0100 0101,三个CI值分别为001,有四种情况:

0 1000 1010 0100 = 0x08A4

0 1000 1010 0101 = 0x08A5

0 1000 1010 0110 = 0x08A6

0 1000 1010 0111 = 0x08A7

6.37 分值2分

题目

C程序:

int x[2][256];
int i;
int sum=0;

for (i=0;i<256;i++){
	sum += x[0][i] * x[1][i];
}
  • sizeof(int) == 4

  • 数组X从存储器地址0x0开始,按照行优先顺序存储。

  • 每种情况中,高速缓存最开始时都是空的。

  • 唯一的存储器访问是对数组x的条目进行访问,其他所有变量都存储在寄存器中。

A、假设高速缓存是1024字节,直接映射,高速缓存块大小为32字节,不命中率是多少?

直接映射是每组只有一个高速缓存行,块大小为32字节,表示可以存储8个int数值。
数组是按照行优先存储的,计算数组一行的大小为256*4=1024,所以高速缓存只够存数组的一行。
所以x[0]和x[1]的每一个元素(x[0][i]和x[1][i])对应的高速缓存是同一个块。
因此,每次请求都在加载,驱逐,替换。不命中率为100%。

B、高速缓存改为2048字节,不命中率是多少?

缓存足够大,可以存储整个数组
因此只有冷不命中,而块大小为32字节,表示可以存储8个int数值
所以每次都会加载x[0][i]~x[0][i+7]共8个数值到缓存组中,这里就只有x[0][i]是不命中的
所以不命中率为1/8 = 12.5%

C、高速缓存是1024字节,两路组相联,使用LRU替换策略,高速缓存块大小为32字节,不命中率是多少?

两路组相联表示每组有两个高速缓存行,而每行可以存储8个数值
高速缓存只有1024字节,不够存储数组
发生不命中的时候,一个是冷不命中,另一个是缓存中没有,需要加载进去
这时使用的是LRU替换策略,替换最近最少用的,替换的那一行的8个数值已经都用过了,再也不会用到了
所以最后还是相当于只有冷不命中,相当于每8个数据中只有一个是不命中的
所以不命中率为1/8 = 12.5%

D、C中,更大的高速缓存大小会帮助降低不命中率吗?

不会,因为块大小不变时,冷不命中的概率不可能被减小。

E、C中,更大的块大小会帮助降低不命中率吗?

会降低,因为一个块的大小增加,冷不命中的频率就降低。

6.38 分值2分

解:

由题意可知,C=4KB=4096 Bytes,而C = S x E x B,在直接映射高速缓存中E = 1,块大小B=16 Bytes,可得S = 256,一共有256个高速缓存组。

(1)N = 64时:

数组大小为2x64x4=512字节,缓存容量足够大,不用考虑容量不命中。
因为每块是16字节,数组中每个单元为4字节,所以四个一组,一共需要16组,每一组中的行都是满的

sumA步长为1,遵循了行优先顺序,这个里面只有冷不命中,就是四个中有一个不命中,不命中率为0.25

sumB是列优先,步长为N,每一次都会与上一次的映射到同一个块,导致每次都会冲突,所以不命中率为1

sumC中除了四个中有一个冷不命中外,还因为列扫描到i+1时的冲突不命中(每次都会映射到同一组同一块),所以不命中率为0.5

(2)N = 60时:

数组大小为2x60x4=480字节,缓存容量足够大,不用考虑容量不命中。
因为每块是16字节,数组中每个单元为4字节,所以四个一组,一共需要16组,但行中不是满的

sumA同上,只有冷不命中,不命中率为0.25

sumB消除了冲突不命中,不会每次都映射到同一组同一块,所以只有冷不命中,不命中率为0.25

sumC理由同上,只有冷不命中,不命中率为0.25

推荐阅读