bho*_*ath 5 c processor cpu-architecture cpu-cache
我有Intel Core IvyBridge处理器,Intel®Core™i7-3770 CPU @ 3.40GHz(L1-32KB,L2-256KB,L3-8MB)。我知道L3具有包容性,并且在多个内核之间共享。我想了解有关我的系统的以下内容
第1部分 :
第2部分 :
如果L1和L2都包括在内,则为了找到L2的访问时间,我们首先声明一个大小大于L2高速缓存(256KB)的数组(1MB),然后开始访问整个数组以加载到L2高速缓存中。之后,由于缓存行大小为64B,所以我们以64B的步长从开始索引到结束索引访问数组元素。为了获得更好的准确结果,我们重复此过程(访问索引处index,开始到末尾的数组元素)多次,比如说进行一百万次并取平均值。
我的理解为什么这种方法会给出正确的结果,如下所示:当我们访问大小大于L2缓存大小的数组时,整个数组将从主内存加载到L3,然后从L3加载到L2,再从L2加载到L1。整个数组的最后32KB位于L1中,因为最近已对其进行了访问。由于具有包容性和高速缓存一致性,整个阵列也存在于L2和L3高速缓存中。现在,当我从起始索引再次开始访问数组时,起始索引不在 L1高速缓存中,而是在L2高速缓存中,因此将出现高速缓存未命中,并且将从L2高速缓存中加载它。这样,整个数组的所有元素将需要更长的访问时间,总的来说,我将获得整个数组的总访问时间。要获得单次访问权限,我将获得总访问次数的平均值。
我的问题是- 我正确吗?
提前致谢 。
请参阅《英特尔优化指南》中的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,因为Ivy-Bridge在上一代产品中只有很小的微体系结构更改)。
因此,关于您的问题:
还要注意,如果基准测试访问的数据集大于L2,则它可能无法位于L2中(特别是如果您串行访问它并且超出L2的大小超过单向的大小),并且您必须从L3取回它。