组成原理
2010-44
某计算机的主存地址空间大小为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_array2()
{
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开始)?
答案
(1)数据Cache的总容量为532B。
(2)数组元素a[0][31]所在的主存块对应的Cache行号为6,a[1][1]对应的Cache行号为5。
(3)程序A的命中率为93.75%,程序B的命中率为0%。程序A比程序B执行快,因为程序A按行顺序访问数组,利用了空间局部性,Cache命中率高;程序B按列顺序访问数组,局部性差,导致频繁替换,Cache命中率低。