C++ 理解CPU二级缓存和二级拒绝\u总线\u此\u核心\u所有\u无效

C++ 理解CPU二级缓存和二级拒绝\u总线\u此\u核心\u所有\u无效,c++,multithreading,caching,x86,multicore,C++,Multithreading,Caching,X86,Multicore,考虑具有以下核心拓扑的Intel Core 2体系结构: Socket 0: ( 0 2 4 6 ) Socket 1: ( 1 3 5 7 ) 每个核心都有自己的一级缓存;二级缓存组如下所示: ( 0 2 ) ( 4 6 ) ( 1 3 ) ( 5 7 ) 一, . 我观察到,在某些应用程序中,性能计数器L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID的值相当高。在这些应用程序中,二级数据缓存未命中率也很高。此外,资源暂停时间也很高,是总暂停周期的主要部分 例如,核

考虑具有以下核心拓扑的Intel Core 2体系结构:

Socket 0: ( 0 2 4 6 )
Socket 1: ( 1 3 5 7 )
每个核心都有自己的一级缓存;二级缓存组如下所示:

( 0 2 ) ( 4 6 ) ( 1 3 ) ( 5 7 )
一, . 我观察到,在某些应用程序中,性能计数器L2_REJECT_BUSQ_THIS_CORE_ALL_INVALID的值相当高。在这些应用程序中,二级数据缓存未命中率也很高。此外,资源暂停时间也很高,是总暂停周期的主要部分

例如,核心0在二级缓存中找到数据并未命中,然后其二级缓存的总线控制器向其他二级缓存的总线控制器广播一些消息,以查看数据是否在其L2中,这是否正确。然而,由于总线带宽的限制,总线中存在高争用,其他总线队列一直处于满状态,那么核心0必须多次重新广播查找消息?如果这是真的,那么这就是为什么L2拒绝,BUSQ,这个,核心,所有无效的,这么高的原因?还是我在口译

二, . 撇开冷未命中的影响不谈,如果我执行一个核心上有100个二级缓存未命中的循环,导致200个二级缓存拒绝\u BUSQ\u此\u核心\u所有\u无效,然后执行一个更长的循环,这是正确的吗(例如,迭代次数加倍)如果有200个二级数据缓存未命中,将导致400个二级拒绝\u BUSQ\u此\u核心\u所有\u无效?如果不是,什么原因会导致意外的非线性