缓存行ping-pong和false共享是一样的吗?

mbe*_*dev 17 caching multicore processor computer-architecture false-sharing

对于我的学士论文,我必须评估多核系统的常见问题.

在一些书中,我读到了关于虚假共享的内容以及其他有关缓存行乒乓的书籍.具体问题听起来很熟悉,这些问题是否同样存在,但还有其他名称?有人可以给我详细讨论这些主题的书名吗?(我已经有Darry Glove,Tanenbaum的文献......)

Gab*_*ern 35

摘要:

虚假共享缓存行乒乓相关但不一样.虚假共享可能导致缓存行乒乓,但这不是唯一可能的原因,因为缓存行乒乓也可能是由真正的共享引起的.

细节:

虚假分享

当不同的线程具有在程序中共享的数据时,会发生错误共享,但此数据将映射到共享的缓存行.例如,假设一个程序具有一个整数数组,其中一个线程执行对具有偶数索引的所有数组条目的读写操作,另一个线程执行对具有奇数索引的条目的读写操作.在这种情况下,线程实际上不会共享数据,但它们将共享缓存行,因为每个缓存行将包含奇数和偶数索引值(假设缓存行大于整数,通常为真).

缓存行ping-ponging

高速缓存行乒乓是快速连续地在多个CPU(或核心)之间传输高速缓存行的效果.这可以通过原因无论是假性还是真性共享.基本上,如果多个CPU试图在同一个高速缓存行中读取和写入数据,则可能必须在两个线程之间快速连续地传输该高速缓存行,这可能导致性能显着下降(可能比单个性能更差)线程正在执行).虚假共享会使这个问题特别难以检测,因为程序员可能已经尝试编写应用程序,以便线程不共享数据,而不会意识到数据已映射到同一缓存行.但是,虚假共享并不是缓存行ping-ponging的唯一可能原因.这也可能是由多个线程尝试读取和写入相同数据的真正共享引起的.