1. 题目描述
二、答案
- 答案B容易分析
答案A中src最后一个为什么是hit?
- 分析:Cache为直接映射一组一行 块大小8B
映射两个int
也就是一个缓存行映射一行数组
- src 始终按行访问 dst始终按列访问
Cache内容变化过程如下
共8次内存引用
for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++
dst[j][i] = src[i][j];
(1)访问src[0][0] src[0][0]映射到块0 初始Cache为空 不命中 同时加载sr[0][1]到Cache块0
Cache
0 | src[0][0] | src[0][1] |
1 | | |
(2)访问dst[0][0] dst[0][0]映射到块0 不命中 同时加载dst[0][1]到Cache块0
Cache
0 | dst[0][0] | dst[0][1] |
1 | | |
(3)访问src[0][1] src[0][1]映射到块0 不命中 同时加载sr[0][0]到Cache块0
Cache
0 | src[0][0] | src[0][1] |
1 | | |
(4)访问dst[1][0] dst[1][0]映射到块1 不命中 同时加载dst[1][1]到Cache块1
Cache
0 | src[0][0] | src[0][1] |
1 | dst[1][0] | dst[1][1] |
(5)访问src[1][0] src[1][0]映射到块1 不命中 同时加载sr[1][1]到Cache块1
Cache
0 | src[0][0] | src[0][1] |
1 | src[1][0] | src[1][1] |
(6)访问dst[0][1] dst[0][1]映射到块0 不命中 同时加载dst[0][0]到Cache块0
Cache
0 | dst[0][0] | dst[0][1] |
1 | src[1][0] | src[1][1] |
(7)访问src[1][1] 命中
Cache
0 | dst[0][0] | dst[0][1] |
1 | src[1][0] | src[1][1] |
(8)访问dst[1][1] dst[1][1]映射到块1 不命中 同时加载dst[1][0]到Cache块1
Cache
0 | dst[0][0] | dst[0][1] |
1 | dst[1][0] | dst[1][1] |
1. dst 全部不命中
2. src 只有最后一个命中