为什么不能从一个处理器直接访问另一个处理器的缓存?

时间:2015-07-12 12:39:43

标签: caching multiprocessing processor numa mesi

在NUMA架构(非统一内存访问)中,每个处理器都拥有自己的第一级缓存,因此有一个用于处理器通信的协议(MESI)。但为什么每个处理器都可以直接连接到其他处理器呢?我读过这个"连接速度不够快",但这并没有解释太多。

感谢。

1 个答案:

答案 0 :(得分:5)

首先,拥有L1缓存并不意味着 NUMA 架构,主板拓扑仍然是使机器 UMA NUMA <的主要元素/ em>的。

其次,正在使用的Cache Coherence协议取决于架构,可能与 MESI 不同(实际上 MESIF 更适合 NUMA 机器)。

转到您的问题

每个处理器都可以连接到彼此处理器缓存。事实上,每个缓存一致性协议都是这样做的,而不是通过允许直接读/写,因为它需要很多努力以及可重用性差。

然而,可以直接将CPU连接到另一个CPU缓存,实际上它是以Intel CPU的方式实现的。
逻辑核心(即超线程核心)可以共享L2高速缓存,并且同一包中的一些物理核心可以共享L3高速缓存 但是,这里有两个重要方面:第一,共享缓存的CPU数量,第二个它们位于相同的核心/包中

直接连接所有缓存会失去CPU(整体上)内部与CPU的外部之间的界限。
隔离CPU让我们创建了非常可定制的模块化系统,外部协议是一个让我们隐藏实现细节的接口,这比紧密连接的缓存提供的速度更有价值。
当我们需要这样的速度时,我们会构建专用集成系统组件,就像coprocessor一样。

缓存没有直接关联的原因有多种,我不能代表行业领导者,但这里有一些通用的想法。

  1. 无法扩展 2个处理器意味着1个链路,3个处理器意味着3个链路,4个处理器意味着6个链路等 n 处理器需要C(n,2)个链接 n * (n-1) / 2个链接。
    此外,您只能连接具有兼容缓存接口的CPU,这可能意味着您只能连接相同的CPU。缓存架构经常变化,线条可能变大,关联性可能会改变,信号的时序可能更快。
    最后,如果CPU有足够的引脚连接到另外四个CPU,则只能创建四CPU系统。
  2. 需要很多针 Givin访问缓存需要很多引脚,每个内核有两个或三个缓存,每个需要进行寻址和控制,这需要暴露很多引脚,串口不是一个选项,因为它太慢了。
    如果你补充说每个处理器必须相互连接,而不是引脚数量平方爆炸 如果你在缓存之间使用共享总线,你实际上正在使用像 MESI 这样的协议,这是一种试图避免使总线拥塞的协议,因为如果你的CPU很少,那么共享总线上的流量是相当的激烈的,等待轮到它使用它的时间会减慢CPU的速度(即使有存储缓冲区和失效队列)。
  3. 很慢 缓存与核心高度集成,它可以支持多个读/写端口和其他增加并行化的接口。如果没有大量的引脚(并且尺寸和成本大幅增加),所有这些都不能暴露在封装/核心之外。
    缓存在物理上接近核心,这最小化传播延迟,考虑到3GHz CPU的周期 1/3 * 10 ^ -9 ,在那个时间光线最多可以行进 10 cm 5 cm 进行往返行程,信号不会以光速传播。
    此外,当只有内核访问缓存时,设计人员可以根据内核的内部架构进行一些优化。如果核心属于另一个可能不同的CPU,则这是不可能的。
  4. 很复杂 让多个CPU访问缓存需要复制大量电路,例如缓存关联,这意味着当请求地址时,必须在一组可能的候选者之间验证标签,并且必须复制该电路以允许其他CPU以异步方式读/写缓存。
  5. 如此简单:可以直接连接缓存,这对于分立组件来说是不值得的。它适用于集成组件