MM_PREFETCH 固有的访问行为 - Intel

Access behavior of MM_PREFETCH intrinsic - Intel

可用文档 here 提到指定地址可用的数据从内存带到缓存行(缓存级别作为提示提供)。

但是,我很困惑 LLC 是否也被访问(假设提示指定 L1D 或 L2)或者是否总是访问内存 - 无论数据是否可用有限责任公司

我问这个的原因是,在我的某些实验中,我发现使用 _mm_prefetch 内在增加了我的 LLC 负载计数(性能事件),即使我是获得整体性能优势。

预取可以在 LLC 中命中;如果它们在 L2 或 L3 中已经很热的情况下花费额外的 DRAM 流量将数据导入 L1d,那将是一个非常糟糕的设计。

此外,L3 中的副本可能是脏的,因此它无论如何都必须检查 L3 的正确性。

唯一真正的设计选择是数据是否添加到 L3,如果它不存在的话。在 Nehalem 之后的英特尔 CPU 上,在 Skylake-X 之前,, so there's no choice. ()

在 SKX 及更高版本上,通过核心和更小的非包容性 L3 之间的网状互连,prefetchnta 可以避免替换 L3 中的线路,如果它还不是很热的话,但其他预取仍然会选择像需求负载一样在缓存的外层填充数据。 (除了在预取提示中指定的任何缓存级别停止)。