gpt4 book ai didi

c - 包容还是排他? Intel Core IvyBridge 处理器中的 L1、L2 缓存

转载 作者:太空狗 更新时间:2023-10-29 15:02:22 25 4
gpt4 key购买 nike

我有 Intel Core IvyBridge 处理器,Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz(L1-32KB、L2-256KB、L3-8MB)。我知道 L3 在多个核心之间具有包容性和共享性。我想了解有关我的系统的以下内容

第 1 部分:

  1. L1 是包容性的还是排他性的?
  2. L2 是包容性的还是排他性的?

第二部分:

如果 L1 和 L2 都包含,那么为了找到 L2 的访问时间,我们首先声明一个大小大于 L2 缓存(256KB)的数组(1MB),然后开始访问整个数组以加载到 L2 缓存中。之后我们以 64B 的步幅访问从开始索引到结束索引的数组元素,因为缓存行大小为 64B。为了获得更准确的结果,我们重复此过程(访问索引、开始到结束的数组元素)多次,比如 100 万次并取平均值。

我理解为什么这种方法给出正确的结果如下 -当我们访问大小大于 L2 缓存大小的数组时,整个数组将从主内存加载到 L3,然后从 L3 加载到 L2,然后从 L2 加载到 L1。整个数组的最后 32KB 在 L1 中,因为它最近被访问过。由于包含属性和缓存一致性,整个数组也存在于 L2 和 L3 缓存中。现在,当我再次从起始索引开始访问数组时,它在 L1 缓存中,而是在 L2 缓存中,因此会发生缓存未命中,它将从 L2 缓存加载。这样,整个数组的所有元素都需要更长的访问时间,总的来说,我将获得整个数组的总访问时间。为了获得单次访问,​​我将取总访问次数的平均值。

我的问题是 - 我说得对吗?

提前致谢。

最佳答案

请参阅 Intel 优化指南中的第 2.2.5 节 -
http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf

(请注意,这适用于 Sandy-Bridge,但对于 Ivy-Bridge 似乎没有变化,它与上一代相比只有微小的微架构变化)。

所以关于你的问题:

  1. 对于L1,没有包容性的问题,因为它没有要包容的上层缓存
  2. L2 缓存是包容性的,这意味着不能保证位于 L1 中的行也必须位于 L2 中。然而,在大多数情况下,它可能在那里,因为它可能在核心最初请求时被填充到 L2 中,并且有很好的机会在 L2 中存活更长时间,因为它更大(因此驱逐更好地分布在更多集合上),并由 L1 过滤(通常意味着更少的驱逐)

另请注意,如果您的基准测试正在访问大于 L2 的数据集,它可能无法位于 L2 中(特别是如果您串行访问它并且超过 L2 的大小超过单一方式的大小) ,你必须从 L3 中获取它。

关于c - 包容还是排他? Intel Core IvyBridge 处理器中的 L1、L2 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19775173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com