题5

题目

【2010 统考真题】某计算机的主存地址空间大小为 256MB,按字节编址,指令 Cache 和数据 Cache 分离,均有 8 个 Cache 行,每个 Cache 行大小为 64B,数据 Cache 采用直接映射方式。现有两个功能相同的程序 A 和 B,其伪代码如下所示:
程序 A:

int a[256][256]
...
int sum_array1()
{
 int i, j, sum=0;
 for (i=0; i<256; i++)
 for (j=0; j<256; j++)
 sum += a[i][j]
 return sum;
}

程序 B:

int a[256][256]
...
int sum_array1()
{
 int i, j, sum=0;
 for (j=0; j<256; j++)
 for (i=0; i<256; i++)
 sum += a[i][j]
 return sum;
}

假定 int 类型数据用 32 位补码表示,程序编译时 i、j、sum 均分配在寄存器中,数组 a 按行优先方式存放,首地址 320(十进制数)。请回答下列问题,要求说明理由或给出计算过程。
(1) 若不考虑用于 Cache 一致性维护和替换算法的控制位, 则数据 Cache 的总容量为多少?
(2) 数组数据 a[0][31]a[1][1] 各自所在的主存块对应的 Cache 行号分别是多少(Cache 行号从 0 开始)?
(3) 程序 A 和 B 的数据访问命中率各是多少?哪个程序的执行时间更短?

分析