caching - 通过缓存写入时获取的作用是什么?

标签 caching cpu-architecture

假设您有一个 32 字节的直接映射缓存,每个 block 16 字节,并且它读取地址 0xd。缓存的内容是什么?我以为 fetcher 会将 0xd 添加到集合 1(第二个)字节 6 中的缓存中。但在我的模拟器中,0xc 命中,所以显然这是错误的!如有任何帮助,我们将不胜感激。

最佳答案

要确定在哪个集合中找到地址,您可以使用:

(addr >> log2(block size)) & (number of sets - 1)

(假设 block 大小和集合数都是 2 的幂,它们几乎总是如此,因此 &(n-1)%n 相同,是一个模)

对于您的情况,它将是:(0xd >> 4) & 1 ,即 0。

集合 0 中的 block 包含字节 0x0 到 0xf,因此对 0xc 的引用是命中的。

它包含字节 0x0 到 0xf 的原因是计算机内存系统通常设计为比非对齐数据更快地处理自然对齐数据。如果起始 block 的地址的低 log2(N) 位中包含零,则大小为 N 的 block 自然对齐。因此,当引用地址 0xd 时,包含它的对齐 block (起始地址为 0x0)将被加载到缓存中。

关于caching - 通过缓存写入时获取的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47522376/

相关文章:

cpu-registers - 程序计数器和指令寄存器

延迟加载图像的 Android 内存不足错误

caching - Jekyll 等静态站点生成器如何处理浏览器缓存

PostgreSQL 查询缓存 - 意外关闭连接

java - 如何使用 Spring MVC 和 Spring Security 为资源处理程序启用 HTTP 缓存

database - 启动具有许多交互的社交应用程序时要避免的代码和服务器陷阱?

assembly - 为什么 Ice Lake 没有像 tremont 那样的 MOVDIRx?他们已经有更好的了吗?

linux - Power8 处理器上有多少个 NUMA 节点

c++ - make_shared<>() 中的 WKWYL 优化是否会为某些多线程应用程序引入惩罚?

performance - Haswell内存访问