需要帮助理解缓存写作

时间:2014-03-16 21:26:53

标签: c caching architecture

我正在通过计算机系统:程序员的视角工作,我遇到了一个带有32字节直接映射数据缓存和32字节块的问题集。

struct point_color {
    int c;
    int m;
    int y;
    int k;
};

struct point_color square[16][16];
int i, j;

/* Outer loop #1 */

for (i = 0; i < 16; i++){
    for (j = 0; j < 16; j++) {
        square[i][j].c = 0;
        square[i][j].m = 0;
        square[i][j].y = 1;
        square[i][j].k = 0;
    }
}

/* Outer loop #2 */

for (i = 0; i < 16; i++){
    for (j = 0; j < 16; j++) {
        square[j][i].c = 0;
        square[j][i].m = 0;
        square[j][i].y = 1;
        square[j][i].k = 0;
    }
}

我也给出了以下规格:

  • sizeof(int) == 4

  • square从内存地址0开始。

  • 缓存最初为空。

  • 唯一的内存地址是数组方块的条目。变量ij存储在寄存器中。

对于每个单独运行的外循环,我必须找到:

一个。写入总数。

B中。缓存中丢失的写入总数。

℃。未命中率。


对于循环#1,我认为:

一个。内循环中的每一行分别写入2个结构点。因此,由于有4行,每个内循环写8次。对于整个代码块,16 * 16 * 8 = 2048。

B中。每个内循环有1个错过。 16 * 16 * 1 = 256。

℃。 256/2048 = 1/8 = 12.5%。

关于循环#2,我认为写入的总数是相同的,但由于切换的尺寸,内部循环的错过写入为2。我不确定如何更准确地说出来。

我的理解是否正确?

0 个答案:

没有答案