问答题
某计算机的主存地址空间大小为256MB,按字节编址。指令cache和数据cache分离,均有8个cache行,每个cache行大小为64B,数据cache采用直接映射方式。现有两个功能相同的程序1和程序2,其伪代码如下所示:程序1:int a[256][256]:int sum_array1(){int i,j,sum=0;for(i=0;i<<256;i++)for(j=0;j<256;j++)程序2:int a[256][256];int sum_array2(){int i,j,sum=0;for(j=0;j<256;j++)for(i=0;i<256;i++)假定int类型数据用32位补码表示,程序编译时i,j,sum均分配在寄存器中,数组a按行优先方式存放,其首地址为320(十进制数)。请回答下列问题,要求说明理由或给出计算过程。(1)若不考虑用于cache一致性维护和替换算法的控制位,则数据cache的总容量为多少?(2)数组元素a[0][31]和a[1][1]各自所在的主存块对应的cache行号分别是多少(cache行号从0开始)?(3)程序A和B的数据访问命中率各是多少?哪个程序的执行时间更短?
【正确答案】正确答案:(1)数据cache的总容量为:4256位(532字节)。 (2)数组a在主存的存放位置及其与cache之间的映射为: a[0][31]所在主存块映射到cache第6行, a[1][1]所在主存块映射到cache第5行。 (3)编译时i,j,sum均分配在寄存器中,故数据访问命中率仅考虑数组a的情况。 ①程序1的数据访问命中率为93.75%; ②程序2的数据访问命中率为0。 程序1的执行比程序2快得多。
【答案解析】