2013-11-04 44 views
4

我有英特尔酷睿IvyBridge处理器,英特尔®酷睿TM i7-3770 CPU @ 3.40GHz(L1-32KB,L2-256KB,L3-8MB)。我知道L3是包容性的,可以在多个核心之间共享。我想知道对于以下到我的系统包容还是独家?英特尔酷睿IvyBridge处理器中的L1,L2缓存

PART1:

  1. L1是包容还是排斥?
  2. L2是包容还是独占?

PART2:

如果L1和L2是包括两个端值然后找到L2的存取时间,我们首先声明大小的阵列(1MB)大于L2高速缓存(256KB),然后开始访问整个数组加载到二级缓存中。之后,我们访问从开始索引到结束索引的数组元素,跨度为64B,因为缓存行大小为64B。为了获得更准确的结果,我们重复这个过程(在索引处,开始 - 结束处访问数组元素)多次,例如100万次,并取平均值。

我的理解为什么这种方法提供了正确的结果如下 - 当我们访问尺寸比L2高速缓存大小更多的阵列,那么整个阵列从主存储到L3,然后从L3到L2,L2,然后到L1装。整个阵列的最后32KB在L1中,因为它最近被访问。整个阵列也存在于L2和L3缓存中,这也是由于包容性和缓存一致性。现在,当我开始从L1缓存中的起始索引(即而不是)开始再次访问数组时,因此会出现缓存未命中并将从L2缓存中加载。这样整个数组的所有元素都会有更高的访问时间,总共我会得到整个数组的总访问时间。要获得单一访问权限,我将采用访问总数的平均值。

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

在此先感谢。

回答

4

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

(注意,这适用于桑迪桥,但由于改变了常春藤桥,其中有只有轻微的微量不会出现上一代的架构变化)。

所以,关于你的问题:

  1. 对于L1有没有包容性的问题,因为它没有上一级缓存是L2缓存包容,含义包括-的
  2. 不能保证居住在L1中的线路也必须在L2中。然而在大多数情况下,它可能是可能在那里,因为它最初可能被核心请求填充到L2中,并且有很大的机会在L2中更长时间地存活,因为它更大(因此驱逐更好地传播到更多套),并通过L1(通常意味着更少的驱逐)

还要注意的是,如果你的基准是访问一个数据集比L2大,它可能会失败在L2坐(滤特别是如果你连续访问它并超过L2的尺寸超过单一尺寸),并且您必须从L3获取它。

+0

谢谢Leeor。你能告诉我L1是如何处理的吗?它是否会检查L2中的数据,然后直接检查L1或L3中的数据?另外,还有一个疑问是,当在L1中发生未命中并且新线从高速缓存中取出时,当L1中的高速缓存行被替换时,是否会有L2或L3中的替换。 – bholanath

+0

未命中将查找下一个缓存级别,L1-> L2-> L3。当一条线被提取时,它应该填写所有的缓存级别 - 填充L3是强制性的,因为它是包容性的,L2不像我们所说的那样包容,但是填充它仍然是一个好主意,因为该线可能会悄悄地从L1 ,所以你希望它在其他层面上复制。 – Leeor

+0

谢谢@leeor。 – bholanath

相关问题