CPU中L3缓存未命中的原因是什么?

9
我有一个关于x86架构(如Xeon X5660)中不同缓存级别的缓存未命中之间关系的问题。
我在OpenCL应用程序(Blackscholes)上进行了一些性能计数器分析。对于每个计数器,我将所有核心上的所有值相加,得到以下结果:
 instructions #: 493167746502.000000 

 L3_MISS #: 1967809.000000 

 L1_MISS  #: 2344383795.000000 

 L2_DATA_MISS #: 901131.000000 

 L2_MISS #: 1397931.000000 

 memory loads #: 151559373227.000000

问题是为什么L3缺失次数比L2缺失次数更多?(我已经多次重新运行了分析,方差不显著)。我的基本想法是:
L2缺失= L3命中+ L3缺失
有人能解释一下这里出了什么问题吗?我错过了什么吗?
再进一步说,是什么导致最后一级缓存(CPU)的高速缓存读取?仅仅是从L2数据缺失吗?
谢谢

4
你是否在使用一个具有独立L2缓存和统一L3缓存的架构来进行测量?如果是这样,你可能只是从一个L2缓存中读取缓存未命中的数据,而L3缓存的数据可能来自统一的L3缓存。 - boiler96
是的,我注意到了这一点。但我确定我已经为所有核心进行了总结。所以它是否统一并不重要,对吧? - Zk1001
另外一件事是,当我执行这个命令:"cat /sys/devices/system/cpu/cpu0/cache/index2/type",我得到的结果是“统一的”。众所周知,对于所有的Westmere架构,L2缓存是私有的,每个核心为256K,不是吗? - Zk1001
2
如果您查看Westmere的手册(在此处:http://download.intel.com/products/processor/manual/325462.pdf)。第18.6.2节指出,L3缓存性能事件在处理器的“uncore”中的一个位置上维护。我怀疑当您从特定核心查询这些计数器时,它会将该查询传递到uncore并返回L3的计数。它不会跟踪引发L3缺失的内存访问的核心。 - boiler96
1个回答

2

32纳米六核Westmere-EP芯片

图片来源:http://www.theregister.co.uk/2010/02/03/intel_westmere_ep_preview/

正如上面所示,'Westmere-EP'架构中的3个核心块共享一部分L3高速缓存。因此,“boiler96”所说的是有道理的。 如果你发生了单个核心的L2缺失,或者你的L3缺失计数来自Uncore,那么它是所有核心缺失的组合计数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接