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%
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章