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

时间:2015-06-06 16:18:10

标签: caching multicore computer-architecture processor false-sharing

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

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

1 个答案:

答案 0 :(得分:34)

要点:

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

详细说明:

虚假分享

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

缓存行ping-ponging

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