cpu - 缓存地址映射如何工作?

标签 cpu cpu-cache

我开始学习 cpu 缓存在基础层面上的工作原理。但我对某一点感到困惑。当 CPU 根据两个恰好具有相同标记和设置的地址获得命中时会发生什么?

假设我们有一个带有 16 字节 block 的 64 字节缓存。地址是12位的并且使用直接映射。标签将有 5 位,集合将有 2 位,偏移量将有 5 位。如果我们有两个地址 0x070 (0000 0111 0000 inn binary ) 和 0x068 (0000 0110 1000),我们会看到标签(前五位)是相同的,集合是相同的,只是偏移量不同。

据我了解,当它是“命中”时,计算机仅考虑标签和设置。因此,如果两个地址相继运行,则缓存将会“命中”。为什么这有效?难道两个地址都包含不同的信息,因此如果CPU将它们视为相同的东西会导致错误吗?或者CPU是否检查这些值是否相同然后继续?

如果我遗漏了什么或犯了错误,请告诉我。

最佳答案

两个地址都位于同一高速缓存行内。 CPU 将缓存行作为一个整体进行操作,使用地址的低位来知道要修改缓存行中的哪个字节。

关于cpu - 缓存地址映射如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48914737/

相关文章:

multithreading - 为什么自旋锁在单个 CPU 上没有意义?

assembly - CPU:CPU 内部的程序,用于确定指令的确切原理(?!)

hibernate - memcached作为hibernate L2层缓存

c++ - 编译器在编译时给出的缓存信息

intel - 我不明白 cachegrind 与 perf 工具之间的缓存未命中数

kernel - 信号量需要系统调用吗?

PBS 中给定 shell 的 Linux echo cpu(核心)名称/编号

python-3.x - 使用 xgb 和 XGBclassifier 的 CPU 比 GPU 快

java - 原子长矩阵