了解CPU L2缓存和L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID

时间:2013-01-10 09:05:21

标签: c++ multithreading caching x86 multicore

考虑具有以下核心拓扑结构的英特尔酷睿2架构:

Socket 0: ( 0 2 4 6 )
Socket 1: ( 1 3 5 7 )

每个核心都有自己的L1缓存; L2缓存组是这样的:

( 0 2 ) ( 4 6 ) ( 1 3 ) ( 5 7 )

1 。我观察到在某些应用程序中,性能计数器L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID的值相当高。在这些应用程序中,#L2数据高速缓存未命中也很高。此外,RESOURCE_STALLS_ROB_FULL也很高,并且是总停顿周期的主要部分。

告诉你,例如,核心0在L2中发现数据并且未命中,然后其L2缓存的总线控制器向其他L2的总线控制器广播一些消息以查看数据是否在其L2中,这是否正确。但是,由于总线带宽的限制,总线存在较高的争用,不知何时其他人的总线队列仍然是满的,因此核心0必须多次重新广播查找消息?如果这是真的那么这就是为什么L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID如此之高?或者我在解释?

2 。如果我执行一个在核心上有100个L2数据高速缓存未命中的循环,导致200个L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID,然后执行更长的循环(例如迭代次数翻倍),那么假设放弃冷缺失的影响是正确的吗?有200个L2数据缓存未命中的结果将导致400 L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID?如果不是,导致意外非线性的原因是什么?

0 个答案:

没有答案