Cache命中率计算实例

题目(来源课堂)

考虑一个4行且每行16字节的cache,主存按每块16字节划分,即块0有地址0到15的16个字节,等等。现在考虑一个程序,它以如下地址顺序访问主存:

一次:63 ~ 70

循环10次:15 ~ 32,80 ~ 95

(a)假设cache采用直接映射技术。主存块0, 4, … 指派到行0;块1,5, … 指派到行1;以此类推。请计算命中率。

(b)假设cache采用二路组关联映射,共有两组,每组两行。偶序号块被指派到组0,奇序号块被指派到组1。请计算使用LRU替换策略的二路组关联cache的命中率。


解答

(a) 采用直接映射

  1. 一次访问:63 ~ 70
    主存地址63-70为主存的第3、4块,将被指派到Cache的行3和0,访问过程中,顺序发生以下事件:
    (i) 访问主存地址63,主存第3块被调入Cache的行3;
    (ii) 访问主存地址64,主存第4块被调入Cache的行0;
    (iii) 访问主存地址65-70,均为主存第4块,已经在Cache中,Cache均命中。
  2. 循环10次访问:15 ~ 32,80 ~ 95
    主存地址15-32为主存的第0、1和2块,将被指派到Cache的行0、1和2。
    主存地址80-95为主存的第5块,将被指派到Cache的行1。
    在第1次循环中,顺序发生以下事件:
    (i) 访问主存地址15,为主存第0块被调入Cache的行0;
    (ii) 访问主存地址16,为主存第1块被调入Cache的行1;
    (iii) 访问主存地址17-31,均为主存第1块,已经在Cache中,Cache均命中;
    (iv) 访问主存地址32,为主存第2块被调入Cache的行2;
    (v) 访问主存地址80,为主存第5块被调入Cache的行1;
    (vi) 访问主存地址81-95,均为主存第5块,已经在Cache中,Cache均命中。
    在后续的每次循环中,顺序发生以下事件:
    (i) 访问主存地址15,为主存第0块,已经在Cache的行0中,命中;
    (ii) 访问主存地址16,为主存第1块被调入Cache的行1;
    (iii) 访问主存地址17-31,均为主存第1块,已经在Cache中,Cache均命中;
    (iv) 访问主存地址32,为主存第2块,已经在Cache的行2中,命中;
    (v) 访问主存地址80,为主存第5块被调入Cache的行1;
    (vi) 访问主存地址81-95,均为主存第5块,已经在Cache中,Cache均命中。
  3. Cache命中率 = 缓存命中的次数/总共访问的访问次数
    = (6 + (15 + 15) + (1 + 15 + 1 + 15) * 9) / (8 + (18 + 16) * 10)
    = 324 / 348 = 93.1%

(b) 采用二路组关联映射

  1. 一次访问:63 ~ 70
    主存地址63-70为主存的第3、4块,将被指派到Cache的行3和0,访问过程中,顺序发生以下事件:
    (i) 访问主存地址63,主存第3块被调入Cache的行3;
    (ii) 访问主存地址64,主存第4块被调入Cache的行0;
    (iii) 访问主存地址65-70,均为主存第4块,已经在Cache中,Cache均命中。
  2. 循环10次访问:15 ~ 32,80 ~ 95
    主存地址15-32为主存的第0、1和2块,将被指派到Cache的行0、1和2。
    主存地址80-95为主存的第5块,将被指派到Cache的行1。
    在第1次循环中,顺序发生以下事件:
    (i) 访问主存地址15,为主存第0块被调入Cache组0的行1;
    (ii) 访问主存地址16,为主存第1块被调入Cache组1的行1;
    (iii) 访问主存地址17-31,均为主存第1块,已经在Cache中,Cache均命中;
    (iv) 访问主存地址32,为主存第2块应被调入Cache的组0,但组0已满,根据LRU策略,将组0的行0替代,主存第2块调入Cache组0的行0;
    (v) 访问主存地址80,为主存第5块应被调入Cache的组1,但组1已满,根据LRU策略,将组1的行0替代,主存第5块调入Cache组1的行0;
    (vi) 访问主存地址81-95,均为主存第5块,已经在Cache中,Cache均命中。
    此时后续循环所访问的主存块0、1、2和5均已在Cache中,因此后续循环缓存全部命中。
  3. Cache命中率 = 缓存命中的块数/总共访问内存的块数
    = (6 + (15 + 15) + (18 + 16) * 9) / (8 + (18 + 16) * 10)
    = 342 / 348 = 98.3%
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章