计算cache hit rate例题

题目

cache结构分析

1kB blocks => 2^10 B => b=10
1MB Mem => 2^20 B => m=20
16kB cache with 1kB block => 16(2^4)set => s=4
m = s+t+b => t=6

分析line1的冲突情况

注意,此手稿中分析了i和total,但sol说这两个变量会放入register

i和total不需要考虑访存,sol说会放入register

除此之外,还需要考虑i和total的冲突情况
i的地址是0x18000 = 0b 0001, 1000, 0000, 0000, 0000
set为0, tag为0001,10,根据上述int[]分析,会和最后的set为0的int元素(A[4096]的tag为0001,01)冲突,覆盖该int元素
total的地址是0x18004 = 0b 0001, 1000, 0000, 0000, 0100
set为0, tag为0001,10.与i相同。

关于line2的代码

for (i=0; i < NUM_INTS; i += 128) {
  total += A[i];
}

分析line2的冲突情况

  1. 代码共三个io操作,read A[], read total, write total

  2. A[]数组每两个相隔128的元素有相同的set/tag

逐步分析

由于step=128的访问A数组,共64个元素,后32个元素和前32个元素冲突,但是在相邻的一组数据中,(例如A[0]和A[128], A[256]和A[512])之间有相同tag和set,不会冲突

读A[0],与cache中的A[4096]冲突

读A[128], 与A[0]相同,hit

读A[256], 与A[4096+256]冲突

读A[512], hit

省略部分步骤

posted @ 2022-06-27 19:56  ijpq  阅读(134)  评论(0编辑  收藏  举报