1

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

谢谢。

4

1 回答 1

5

首先,拥有 L1 缓存并不意味着NUMA架构,主板拓扑仍然是构成机器UMANUMA的主要元素。

其次,使用的缓存一致性协议依赖于架构,可能与MESI不同(实际上MESIF更适合NUMA机器)。


转向你的问题

每个处理器都可以连接到其他处理器的高速缓存。事实上,每个缓存一致性协议都这样做,只是不允许直接读/写,因为它需要付出很多努力,而且可重用性很差

但是,可以将 CPU 直接连接到另一个 CPU 缓存,实际上它是在 Intel CPU 上以某种方式实现的。
逻辑核心(即超线程核心)可以共享二级缓存,同一个包中的一些物理核心可以共享三级缓存。
但是这里有两个重要方面:首先,共享缓存的 CPU 数量很少,其次它们在同一个核心/包中。

直接连接所有缓存将失去 CPU内部(整体)和CPU外部之间的界限。
隔离 CPU 让我们可以创建非常可定制和模块化的系统,外部协议是一个让我们隐藏实现细节的接口,这比紧密连接的缓存所带来的速度增益更有价值。
当我们需要这样的速度时,我们会构建专用的集成系统组件,例如协处理器

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

  1. 它不缩放
    2 个处理器表示 1 个链路,3 个处理器表示 3 个链路,4 个处理器表示 6 个链路,依此类推。
    n 个处理器需要 C(n, 2) 个链接,即n * (n-1) / 2 个链接。
    此外,您只能连接具有兼容缓存接口的 CPU,这可能意味着您只能连接相同的 CPU。缓存架构是经常变化的东西,行可能会变大,关联性可能会改变,信号的时序可能会更快。
    最后,如果一个 CPU 有足够的引脚来连接四个以上的 CPU,那么您只能创建四核系统。
  2. 它需要很多引脚
    访问缓存需要很多引脚,每个内核有两个或三个缓存,每个缓存都需要寻址和控制,这需要暴露很多引脚,串行接口不是一个选项,因为它太慢了.
    如果您添加每个处理器必须相互连接,那么引脚的数量会呈二次增长。
    如果你在缓存之间使用共享总线,你实际上是在使用像MESI这样的协议,这是一个试图避免总线拥塞的协议,因为即使你的 CPU 很少,共享总线上的流量也会非常密集,而且等待的时间也很长。轮到使用它会降低 CPU 的速度(即使使用存储缓冲区和失效队列)。
  3. 它很慢
    缓存与内核高度集成,它可以支持多个读/写端口和其他增加并行化的接口。如果没有大量引脚(以及尺寸和成本的巨大增加),所有这些都无法从封装/内核中暴露出来。
    缓存在物理上靠近核心,这样可以最大限度地减少传播延迟,考虑到 3GHz CPU 的周期为1/3 * 10^-9,此时光最多可以传播10 厘米,或者5 厘米往返,并且信号不会以光速传播。
    此外,当缓存仅由内核访问时,设计人员可以根据内核的内部架构进行一些优化。如果核心属于另一个可能不同的 CPU,则这是不可能的。
  4. 它很复杂
    让多个 CPU 访问高速缓存需要复制大量电路,例如作为关联高速缓存,这意味着当请求地址时,必须在一组可能的候选者之间验证标签,并且必须复制该电路以允许其他 CPU 异步读取/写入缓存。

简而言之:可以直接连接缓存,只是不值得分立组件。它是为集成组件完成的

于 2015-07-12T14:23:34.577 回答