在公共高速缓存地址中,我有三个字段:
Tag | Set | Offset将虚拟地址解析为缓存条目的过程应该是确定哪个集合包含我们正在搜索的数据,然后使用标记(虚拟地址的一部分)来消除多路缓存的歧义(每个集合可能包含多个条目)
我的问题是:集合是如何确定的?谁向我们保证,通过只使用虚拟地址的一部分作为标记,我们可以唯一地确定两个相似值之间的缓存命中?
发布于 2013-03-11 05:29:49
地址中的位分为3组:
tag | set index | Block offset
t bits | s bits | b bits如果缓存中块的大小是B字节,那么您将需要b = (log2 B) bits来指定块偏移量。
如果缓存有S个集合,则s = (log2 S)位用于集合索引。如果缓存是完全关联的,那么将只有一个集合,即S = 1和s = 0,这意味着没有位将用于集合索引。
剩余的位用于标签t可以使用t = NUM_BITS - s - b来计算
这将保证任何地址都可以映射到相应的高速缓存线,并且只需查看高速缓存线的valid bit,就可以确认我们在高速缓存中是否有该地址。请注意,高速缓存线大小通常大于字大小,以利用程序中空间数据局部性带来的收益。
当在缓存中找不到请求的地址时,我们需要计算将被带入缓存的数据块的起始地址。
范围的大小始终等于缓存块的大小。通过将地址的块偏移位置零来计算起始地址。通过对地址的块偏移位使用所有1s来计算结束地址。
根据高速缓存关联性和逐出方案(LRU与LFU),决定并填充该新数据块将被存储的集合内的行。
https://stackoverflow.com/questions/15327615
复制相似问题