确定代码段的缓存未命中率

时间:2014-02-28 03:27:19

标签: c caching computer-architecture

我正准备即将开始的考试,我遇到了这个问题:

直接映射的大小为64K的缓存,块大小为16个字节。缓存开始为空

enter image description here

如果...

,缓存未命中率是多少
  1. ROWS = 128,COLS = 128
  2. ROWS = 128且COLS = 192
  3. ROWS = 128且COLS = 256
  4. [解决方案:第5页http://www.inf.ethz.ch/personal/markusp/teaching/263-2300-ETH-spring11/midterm/midterm_sln.pdf]

    我很困惑他们如何得到“缓存存储128 x 128元素”。我认为缓存大小是64K(2 ^ 16)。

    此外,有人可以解释如何处理每个问题吗?我的教授有一些公式来计算每个块中的访问次数:块大小/步幅,但它似乎不起作用。

1 个答案:

答案 0 :(得分:-1)

据我了解;在情况1中,src和dst矩阵的大小为64kb(128 * 128 * 4字节);因为缓存是直接映射的,大小为64kb; src&的条目必须将相同索引的dst映射到缓存中的相同位置(因为(0 + i mod)64 =(64 + i mod)64)同时在行中使用

dest[i][j]=src[i][j]

因此你有100%的失误率;这同样适用于案例3,因为新的大小是64kb(128 * 256 * 4)的倍数,所以它没有任何区别;

但是对于案例2;矩阵的大小变为96 kb(128 * 192 * 4字节);所以现在src& dst可以同时加载,你的失误率会更低。