了解缓存内存

时间:2014-11-04 09:47:46

标签: caching memory

我试图了解缓存内存的读写方式。此外,我正在尝试确定命中率和未命中率。我一遍又一遍地尝试阅读和阅读教科书“计算机系统 - 程序员视角”,似乎无法理解这个想法。也许有人可以帮助我理解这一点:

我正在使用一个包含480行和640列的二维数组。缓存是直接映射的,64 KB,4字节行。以下是C代码:

struct pixel {
char r;
char g;
char b;
char a;
};
struct pixel buffer[480][640];
register int i, j;
register char *cptr;
register int *iptr;

sizeof(char)== 1(意味着数组中的索引每个包含4个字节(如果我理解正确))。缓冲区从内存地址0开始,缓存最初为空(冷缓存)。唯一的内存访问是对数组的条目。所有其他变量都存储在寄存器中。

for (j=0; j < 640; j++) {
for (i=0; i < 480; i++){
buffer[i][j].r = 0;
buffer[i][j].g = 0;
buffer[i][j].b = 0;
buffer[i][j].a = 0;
}
}

对于上面的代码,它将数组中的所有元素初始化为0,因此必须写入。我可以看到这是一个糟糕的局部性,因为数组是逐列而不是逐行编写的。这不会影响错过率吗?我试图根据缓存大小确定此代码的未命中率。我认为未命中率是100%,如果地方是逐行的那么它将是25%。但我并不完全理解缓存内存是如何工作的......任何人都可以告诉我一些可以帮助我更好地理解这一点的内容吗?

1 个答案:

答案 0 :(得分:1)

如果您是初学者,我建议您观看整个教程。 但是对于你的问题,第27至31讲将解释一切。

https://www.youtube.com/watch?v=tGarzP488Wc&index=29&list=PL2F82ECDF8BB71B0C IISc班加罗尔。

相关问题