cpu - 英特尔高速缓存分配技术是否允许一组中的 CPU 对另一组中的高速缓存行进行命中?

标签 cpu cpu-architecture intel cpu-cache

MESI protocol ,如果需要将缓存行加载到缓存中,CPU 将发出 PrRd。根据缓存行是否已在另一个缓存中,发出 BusRd。然后其他缓存将看到 BusRd 并检查它们是否有有效的副本。如果是,该缓存将发送值。

现在英特尔CAT(缓存分配技术)提供了一种将 LLC 缓存使用情况隔离到不同 CPU 的方法。例如,CPU1 使用前 8 路,CPU2 使用后 8 路。我的问题是:如果现在 CPU1 需要加载 CPU2 缓存中的缓存行,CPU2 会发送该副本而不是从主内存加载吗?

最佳答案

是的。 CAT 不是 NUMA 的一种形式,地址空间仍然是共享的。 它只是一个微架构功能,可以帮助您控制缓存占用,以便线程之间的干扰更少(或者可以访问更多缓存机会,具体取决于您如何分配掩码)。

如果您不从其他线程分区返回数据,您将失去一致性(如果该行被修改怎么办?在这种情况下您无法从内存返回过时的数据)。 可以这样想 - 每个线程都可以从整个缓存中查找,但只分配给他的分区(这可以通过破解 LRU 和受害者选择来轻松实现)。 通过这种方式,您可以完全控制专用线路,并且只有共享线路才会被放置在首先访问它们的线程的分区中。足够接近以获得所需的 QoS。

一个开放的实现问题可能是这样的 - 如果您在一个分区中分配一行,但仅由另一个线程继续使用它,会发生什么情况。它最终会迁移到另一个分区吗?我的猜测是否定的,只是因为检测和组织起来太麻烦了。

关于cpu - 英特尔高速缓存分配技术是否允许一组中的 CPU 对另一组中的高速缓存行进行命中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75927834/

相关文章:

c++ - 我如何在 Mac OS X 上使用 GCC 链接英特尔 TBB?

gcc - 如何使用 GCC 或 llvm 编译 Intel VNNI 指令?

intel - Z80 处理器可以运行 Gameboy 游戏吗?

c++ - 使用 int32_t 而不是 double 运行 vector 点积是否更快?

java - jar 作为 ubuntu 上的守护进程使用 100% cpu

ios - 当我打开在 Xcode 4 中创建的 Google Maps 项目时,Xcode 5 会警告我的架构设置

memory - 经典 RISC 管道 - "memory access"阶段实际上做了什么?

python - PyTorch 的 GPU 和 CPU 版本可以安装在同一个 Conda 环境中吗?

javascript - 比较列表时我的 Node.js 会锁定吗?

assembly - 将脏缓存行写入下一级缓存的 RISC-V 指令