首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >缓存组和标签

缓存组和标签
EN

Stack Overflow用户
提问于 2013-03-11 05:06:33
回答 1查看 3.6K关注 0票数 3

在公共高速缓存地址中,我有三个字段:

代码语言:javascript
运行
复制
Tag | Set | Offset

将虚拟地址解析为缓存条目的过程应该是确定哪个集合包含我们正在搜索的数据,然后使用标记(虚拟地址的一部分)来消除多路缓存的歧义(每个集合可能包含多个条目)

我的问题是:集合是如何确定的?谁向我们保证,通过只使用虚拟地址的一部分作为标记,我们可以唯一地确定两个相似值之间的缓存命中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-11 05:29:49

地址中的位分为3组:

代码语言:javascript
运行
复制
  tag  | set index | Block offset
t bits |   s bits  |    b bits

如果缓存中块的大小是B字节,那么您将需要b = (log2 B) bits来指定块偏移量。

如果缓存有S个集合,则s = (log2 S)位用于集合索引。如果缓存是完全关联的,那么将只有一个集合,即S = 1s = 0,这意味着没有位将用于集合索引。

剩余的位用于标签t可以使用t = NUM_BITS - s - b来计算

这将保证任何地址都可以映射到相应的高速缓存线,并且只需查看高速缓存线的valid bit,就可以确认我们在高速缓存中是否有该地址。请注意,高速缓存线大小通常大于字大小,以利用程序中空间数据局部性带来的收益。

当在缓存中找不到请求的地址时,我们需要计算将被带入缓存的数据块的起始地址。

范围的大小始终等于缓存块的大小。通过将地址的块偏移位置零来计算起始地址。通过对地址的块偏移位使用所有1s来计算结束地址。

根据高速缓存关联性和逐出方案(LRULFU),决定并填充该新数据块将被存储的集合内的行。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15327615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档