A:100%
数组x的大小是缓存的两倍,
x[0][0]-x[0][127]刚好存满512字节,那就意味着x[1][0]映射在缓存的组0,那就意味着x[0][i]和x[1][i]总是读到缓存后又互相替换.
B:25%
缓存变为1024字节,意味着x[1][0]被映射在缓存的组128 (组0到127存放x[0][0]到x[0][127]),所以每次读一行时,第一次读会不命中.
C:25%
S=16 B=16 C=512 E=2 一共有16组,优先缓存到空行,都满了之后,会按LFU是按时间排序的,所以最早存的会先淘汰
读x[0][0] | 行0 | 读x[1][0] | 行1 | |||||
组0: | x[0][0] | x[0][1] | x[0][2] | x[0][3] | x[1][0] | x[1][1] | x[1][2] | x[1][3] |
读x[0][1] | 命中 | 读x[1][1] | 命中 | |||||
组1: | x[0][0] | x[0][1] | x[0][2] | x[0][3] | x[1][0] | x[1][1] | x[1][2] | x[1][3] |
读x[0][2] | 命中 | 读x[1][2] | 命中 | |||||
组1: | x[0][0] | x[0][1] | x[0][2] | x[0][3] | x[1][0] | x[1][1] | x[1][2] | x[1][3] |
读x[0][3] | 命中 | 读x[1][3] | 命中 | |||||
组1: | x[0][0] | x[0][1] | x[0][2] | x[0][3] | x[1][0] | x[1][1] | x[1][2] | x[1][3] |
读x[0][4] | 读x[1][4] | |||||||
组2: | x[0][4] | x[0][5] | x[0][9] | x[0][7] | x[1][4] | x[1][5] | x[1][6] | x[1][7] |
D:不能,冷不命中
E:能,一次读的数据多,命中的次数自然就多.