我经历CSAPP的书,我不知道在高速性能方面以下两个环路之间的区别:高速缓存性能
这里缓存有2048字节,直接映射(行号为1 ),并具有16字节的块,并且我们定义下面的结构:
struct algae_position {
int x;
int y;
};
struct algae_position grid[16][16];
代码1:
for (i = 0; i < 16; i++) {
for (j = 0; j < 16; j++) {
total_x += grid[i][j].x;
}
}
for (i = 0; i < 16; i++) {
for (j = 0; j < 16; j++) {
total_y += grid[i][j].y;
}
}
和代码2:
for (i = 0; i < 16; i++) {
for (j = 0; j < 16; j++) {
total_x += grid[i][j].x;
total_y += grid[i][j].y;
}
}
我的想法:我们总是有小姐,命中,小姐,命中的模式,因为一条线只能容纳两个网格元素。所以我们总是有50%的错过率。
然而,根据这本书,代码2将有25%的遗漏率,因为缓存可以容纳整个网格阵列。我应该如何理解这个问题?