我有 Intel Core IvyBridge 处理器,Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz(L1-32KB,L2-256KB,L3-8MB)。我知道 L3 是包容性的,并且在多个核心之间共享。我想知道关于我的系统的以下内容
第1部分 :
- L1 是包容的还是独占的?
- L2 是包容的还是独占的?
第2部分 :
如果 L1 和 L2 都包含,那么为了找到 L2 的访问时间,我们首先声明一个大小大于 L2 缓存(256KB)的数组(1MB),然后开始访问整个数组以加载到 L2 缓存中。之后,我们以 64B 的步长访问数组元素从开始索引到结束索引,因为缓存行大小为 64B。为了获得更好的准确结果,我们重复这个过程(访问索引处的数组元素,开始-结束)多次,比如 100 万次并取平均值。
我的理解为什么这种方法会给出正确的结果如下 - 当我们访问大小超过 L2 缓存大小的数组时,整个数组从主内存加载到 L3,然后从 L3 加载到 L2,然后从 L2 加载到 L1。整个数组的最后 32KB 在 L1 中,因为它最近被访问过。由于包容性和缓存一致性,整个阵列也存在于 L2 和 L3 缓存中。现在,当我再次从起始索引开始访问数组时,它不在 L1 缓存中,而是在 L2 缓存中,所以会有缓存未命中,它将从 L2 缓存中加载。这样,整个数组的所有元素都需要更长的访问时间,总的来说,我将获得整个数组的总访问时间。为了获得单一访问权限,我将取总无访问权限的平均值。
我的问题是 -我正确吗?
提前致谢 。