某计算机的主存地址空间大小为256MB,按字节编址。指令Cache和数据Cache分离,均有8个Cache行,主存与Cache交换的块大小为B,数据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(十进制数)。请回答下列问题,并说明理由或给出计算过程。 程序A和B的数据访问命中率各是多少哪个程序的执行时间更短