文章
36
粉丝
0
获赞
0
访问
3.8k
1. 地址共有$8 \times (64B \times 8b/B + 19 + 1 + 0 + 0)b = 4256b$
元素逐个进行解读——$8 \times$这个是Cache行数,$64B \times 8b/B$是单个Cache块大小,$19$是标记位宽度,$1$为有效位,题目说了不考虑一致性维护位和替换算法位,所以两个都占位$0$
2. 按行优先存放,则
```a[0][31]``` = $320 + (0 \times 256 + 31) \times 4= 320 + 124 = 444$
```a[1][1]``` = $320 + (1 \times 256 + 11) \times 4 = 320 + 1024 + 4 = 1344$
转换成二进制,则
```a[0][31]```:```0001 1011 1100```,```a[1][1]```:```0101 0100 0000```,
然后取中间3位就好(看结构图),得知```a[0][31]```对应行号为$6$,```a[1][1]```对应行号为$5$
当然还有一种方法,比这个简洁
```a[0][31]```对应$(320 + 31 \times 4) / 64 = 6$,```a[1][1]```对应$(320 + 256 \times 4 + 1 \times 4) / 64 \% 8 = 5$
原理就是$物理地址 / 块大小 = 内存块号 \dots 块内地址$,$内存块号 / 行数 = 标记 \dots 行号$
3. 程序A:按行读取
每个字块存放$\frac{64B}{4B} = 16$个int型数据。第一次访问Cache块的时候会有缺失,其余15个均能命中,则程序A的命中率为$\frac{15}{16} = 93.75\%$
程序B:按列读取
因为数...
登录后发布评论
暂无评论,来抢沙发