问答题 某计算机的主存地址空间为256MB,按字节编址,指令Cache分离均有8个Cache行,每个Cache行的大小为64B,数据Cache:采用直接映射方式,现有两个功能相同的程序A和B,其伪代码如下页所示:
问答题 若不考虑用于Cache一致性维护和替换算法的控制位,则数据Cache的总容量是多少?
【正确答案】64B×8=512B;
【答案解析】
问答题 要组元素a[0][31]和a[1][1]各自所在的主存块对应的Cache行号分别是多少(Cache行号从0开始)?
【正确答案】主存地址与cache的地址格式如下图所示:


a[i][j]占32位,共四个字节;a[0][0]的开始地址为:320;
a[0][31]与a[0][0]相距31×4个地址单位,即320+31×4=444;
444换成二进制:110111100;


a[1][1]与a[0][0]相距257×4个地址单位,即320+257×4=1348;
1348换成二进制:10101000100;

【答案解析】
问答题 程序A和B的数据访问命令中各是多少?那个程序的执行时间更短?
【正确答案】程序A按行优先访问数组a[i][j]:
总共需要访问:
256×256=216
第1块
a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[0][4]
a[0][5]
a[0][6]
a[0][7]
a[0][8]
a[0][9]
a[0][10]
a[0][11]
a[0][12]
a[0][13]
a[0][14]
a[0][15]
第2块
a[0][16]
a[0][17]
a[0][18]
a[0][19]
a[0][20]
a[0][21]
a[0][22]
a[0][23]
a[0][24]
a[0][25]
a[0][26]
a[0][27]
a[0][28]
a[0][29]
a[0][30]
a[0][31]
第3块
a[0][32]
a[0][33]
a[0][34]
a[0][35]
a[0][36]
a[0][37]
a[0][38]
a[0][39]
a[0][40]
a[0][41]
a[0][42]
a[0][43]
a[0][44]
a[0][45]
a[0][46]
a[0][47]
行优先的情况下,a[0][0]未命中,但a[0][1],a[0][2],a[0][3],a[0][4],a[0][5],a[0][6],a[0][7],a[0][8],a[0][9],a[0][10],a[0][11],a[0][12],a[0][13],a[0][14],a[0][15]均命中,则未命中的有a[0][0],a[0][16],a[0][32]……即每块的块首元素,共有212个块,即未命中次数为212; 故程序A的数据访问命中率为:
【答案解析】