2009-06-03 136 views
28

我有几个关于在多核CPU或多处理器系统中使用的高速缓存存储器的问题。 (虽然不直接相关的节目,它有很多的反响,同时一个针对多核处理器/多处理器系统编写软件,因此要求在这里!)多核英特尔CPU如何共享高速缓存?

  1. 在多处理器系统或多核处理器(英特尔四核处理器,内核两条Duo等)。每个CPU核心/处理器都有自己的缓存(数据和程序缓存)?

  2. 一个处理器/内核是否可以访问对方的缓存内存,因为如果他们被允许访问对方的缓存,那么我认为可能会有较少的缓存未命中,如果该特定处理器缓存没有一些数据,但其他一些第二处理器的缓存可能有它,从而避免从内存读入第一个处理器的缓存?这个假设是否有效?

  3. 在允许任何处理器访问其他处理器的缓冲存储器时是否会有任何问题?

+0

半相关:[生产者 - 消费者共享超级同胞与非超级同级兄弟之间的内存位置的延迟和吞吐量成本是多少?](https://stackoverflow.com/questions/45602699/what-are -the-延迟和吞吐量的成本 - 的 - 生产者 - 消费者分享对的一备忘录)。并且[在线程之间的数据交换中使用什么将在一个使用HT的Core上执行?](https://stackoverflow.com/questions/32979067/what-will-be-used-for-data-exchange-between-线程正在执行一个核心wi) – 2017-09-20 13:43:54

回答

2

要回答你的第一个,我知道了酷睿2有一个2级高速缓存系统,其中每个处理器都有自己的一级缓存,以及它们共享二级缓存。这有助于数据同步和内存利用。

要回答你的第二个问题,我相信你的假设是正确的。如果处理器能够访问彼此的缓存,显然缓存未命中将会减少,因为处理器可以选择更多的数据。但是,请考虑共享缓存。就Core 2 Duo而言,共享缓存允许程序员在这个环境中安全地放置常用变量,以便处理器不必访问他们各自的第一级缓存。

要回答你的第三个问题,访问其他处理器的高速缓冲存储器可能会出现问题,这会导致“单写多读”原理。我们不能允许多个进程同时写入内存中的相同位置。

欲了解更多关于core 2 duo的信息,请阅读这篇整洁的文章。

http://software.intel.com/en-us/articles/software-techniques-for-shared-cache-multi-core-systems/

10

快速解答 1)2)否,但一切都取决于你是指什么内存实例/资源,可能存在在同一时间几个位置的数据。 3)是的。

对于这个问题的全部解释,您应该阅读由Ulrich Drepper(http://lwn.net/Articles/250967/)编写的9部分文章“每个程序员应该知道的关于内存的内容”,您将会看到您似乎正在查询的问题的全貌在一个好的和可访问的细节。

+1

+1指出优秀论文。 – sybreon 2009-06-05 02:34:42

29

在多处理器系统或多核处理器(英特尔四核处理器, 核心2朵等。)并在每个CPU核心/处理器有其自己的高速缓存 存储器(数据和程序高速缓存)?

  1. 是的。它因具体芯片型号而异,但最常见的设计是每个CPU内核都有自己的专用L1数据和指令高速缓存。 L2统一缓存通常在所有核心之间共享。

可在一个处理器/内核访问彼此的缓存,因为如果 允许它们访问彼此的缓存,那么我相信有 可能是较小的高速缓存未命中,在方案中,如果该特定 处理器高速缓存没有一些数据,但其他第二个处理器的高速缓存可能会有它,从而避免从内存读取到第一个处理器的高速缓存中 ?这个假设是否有效?

  • 号每个CPU核的L1高速缓存是在同一芯片上为核心,并且不能由其他核访问。核心每个都通过共享数据总线连接到L2高速缓存。
  • 还会再允许任何处理器访问其他 处理器的高速缓存中的任何问题?

    1. 是的 - 根本没有线连接各种CPU高速缓存到其他核心。如果一个内核想访问另一个内核的缓存中的数据,那么它可以做的唯一数据通路就是系统总线。

    一个非常重要的相关问题是cache coherency problem。考虑以下几点:假设一个CPU内核在其缓存中有一个特定的内存位置,并写入该内存位置。然后,另一个核心读取该内存位置。你如何确保第二个核心看到更新的价值?这是缓存一致性问题。有各种解决方案;请参阅维基百科等。

    +1

    解决方案的“多样性”实际上并没有多种多样。在[MESI协议](https://en.wikipedia.org/wiki/MESI_protocol)上,几乎所有内容都使用了一些细微的变体。许多缓存可以有一个共享线的副本,但一致性域(即系统)中只有一个缓存可以有一条处于修改或排他状态的行。因此,为了编写一行,CPU会执行Read-For-Ownership,以确保系统中没有其他缓存具有该行的副本。相关:原子读取 - 修改 - 写入如何工作(`lock inc [mem]`):https://stackoverflow.com/questions/39393850/can-num-be-atomic-for-int-num – 2017-09-20 13:29:04

    3

    英特尔称为核心缓存共享技术英特尔智能缓存。有一个关于它的维基页面存根:https://en.wikipedia.org/wiki/Smart_Cache

    然后例如用于处理器i5-3210M,该ark page有一个“英特尔智能高速缓存:3 MB”字段。

    Datasheet Volume 1 1.1 “处理器功能详细信息” 表示:

    • 每个核心
    • 256 KB的32 KB指令和32-KB的数据的第一级高速缓存(L1)共享指令/数据第二级高速缓存(L2),用于每个核心
    • 最多8-MB共享指令/数据第三级高速缓存(L3),所有核心之间共享