这是一道作业问题,但已经过了截止时间并给出了答案,我不知道他们是如何得出这些答案的。与高速缓存相关,我把很多概念混淆了。
以下是问题:
对于一个直接映射高速缓存设计,使用32位地址,下面的地址位用于访问高速缓存。
从我的理解来看,索引位决定了内存中特定位置映射到高速缓存中的哪个块。地址最低的log(base2)位确定了缓存块,这里有5个索引位,所以我知道在高速缓存中会有2 ^ 5个块,即32个块。 那么高速缓存块大小(以字为单位)是多少?
根据我们得到的答案,高速缓存块大小为8。根据助教给我们的一些笔记,块大小为2^(#of offset bits),在这种情况下应该是5。然而,这给了我一个32的答案,所以我不知道8来自哪里。此外,在这本书中从未定义“偏移位”这个术语,那么能否有人告诉我确切地是什么意思?
在这里我想到,由于同一内存地址永远不会被引用两次,所以应该没有命中,因为缓存永远不会在缓存中找到正在查找的数据。然而,根据答案,命中率应为0.25,所以我猜又不知道发生了什么。最后,对于最后一个问题,答案如下: <000001, 0001, mem[1024]> <000001, 0011, mem[16]> <001011, 0000, mem[176]> <001000, 0010, mem[2176]> <001110, 0000, mem[224]> <001010, 0000, mem[160]> 其中包含一些原问题中根本不存在的内存地址(176、2176),所以到这一步,我完全迷失了方向。能有人帮助澄清一些问题吗?
以下是问题:
对于一个直接映射高速缓存设计,使用32位地址,下面的地址位用于访问高速缓存。
从我的理解来看,索引位决定了内存中特定位置映射到高速缓存中的哪个块。地址最低的log(base2)位确定了缓存块,这里有5个索引位,所以我知道在高速缓存中会有2 ^ 5个块,即32个块。 那么高速缓存块大小(以字为单位)是多少?
根据我们得到的答案,高速缓存块大小为8。根据助教给我们的一些笔记,块大小为2^(#of offset bits),在这种情况下应该是5。然而,这给了我一个32的答案,所以我不知道8来自哪里。此外,在这本书中从未定义“偏移位”这个术语,那么能否有人告诉我确切地是什么意思?
在这里我想到,由于同一内存地址永远不会被引用两次,所以应该没有命中,因为缓存永远不会在缓存中找到正在查找的数据。然而,根据答案,命中率应为0.25,所以我猜又不知道发生了什么。最后,对于最后一个问题,答案如下: <000001, 0001, mem[1024]> <000001, 0011, mem[16]> <001011, 0000, mem[176]> <001000, 0010, mem[2176]> <001110, 0000, mem[224]> <001010, 0000, mem[160]> 其中包含一些原问题中根本不存在的内存地址(176、2176),所以到这一步,我完全迷失了方向。能有人帮助澄清一些问题吗?