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

问题描述 投票:0回答:1

MESI协议中,如果一个cacheline需要加载到一个cache中,CPU会发出一个

PrRd
。根据缓存行是否已经在另一个缓存中,发出
BusRd
。然后其他缓存将看到
BusRd
并检查它们是否具有有效副本。如果是,此缓存将发送值。

现在intel CAT(Cache Allocation Technology)提供了一种将LLC缓存使用隔离到不同CPU的方法。例如,CPU1 使用前 8 种方式,CPU2 使用后 8 种方式。我的问题是:如果现在 CPU1 需要加载 CPU2 缓存中的缓存行,CPU2 会发送该副本而不是从主内存加载吗?

cpu cpu-architecture intel cpu-cache
1个回答
0
投票

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

如果您不从其他线程分区返回数据,您将失去连贯性(如果该行被修改怎么办?在这种情况下,您不能从内存中返回陈旧数据)。 可以这样想——每个线程都可以从整个缓存中查找,但只分配到他的分区(这可以很容易地通过破解 LRU 和受害者选择来实现)。 这样你就可以完全控制专用线路,只有共享线路才会被放置在首先访问它们的线程的分区中。足够接近以获得所需的 QoS。

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

© www.soinside.com 2019 - 2024. All rights reserved.