【知识回顾】
(1)指令Cache和数据Cache分离后的数据Cache=标记阵列+数据(而不是只有数据);
(2)
【题目】某计算机的主存地址空间大小为256B,按字节编址。指令Cahce和数据Cache分离,均有8个Cache行,每个Cache行大小为64B,数据Cache采用直接映射方式。现有2个功能相同的程序A和B,伪代码如下:
假定int类型数据用32位补码表示,程序编译时,i、j和sum均分配在寄存器中,数组a按行优先存放,其首地址为320(十进制数)。
(1)不用考虑用于Cache一致性维护和替换算法的控制位,数据Cache的总容量是多少?
【解析】每个Cache行对应一个标记项
有效位 | 脏位 | 替换控制位 | 标记项 |
不考虑用于Cache一致性维护和替换算法的控制位,地址总长度为28位(2^28=256M),块内地址6位(2^6=64B),Cache块号3位(8=2^3),因此Tag的位数为28-6-3=19位,另加一个有效位。
数据Cache的总容量为8×(64+ 20/8)=532B。数据Cache行的结构如下:
(2)a[0][31]和a[1][1]各自所在的主存块对应的Cache行号?(Cache行号从0开始)
【解析】数组按行优先存放,首地址为320,数组元素占4B。a[0][31]所在的主存块
数组a在主存的存放位置及其与Cache之间的映射关系如下:
【法一】
数组按行优先存放,首地址为320,数组元素占4B。a[0][31]所在的主存块对应的Cache行号为
[ (320+(0×256+31)×4)div 2^6 ]mod 2^3=6
a[1][1]所在的主存块对应的Cache行号为
[ (320+(1×256+1)×4)div 2^6 ]mod 2^3=5
【法二】
由(1)知主存和Cache的地址格式如下图:
数组按行优先方式存放,首地址为320,数组元素占4B。a[0][31]的地址为320+31×4=1 10111 1100,因此其对应的Cache行号为110=6;a[1][1]的地址为320+256×4+1×4=1348=101 0100 0111,因此其对应的Cache行号为101=5.
(3)程序A和B的数据访问命中率?哪个程序的执行时间更短?
【解析】