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

use*_*289 1 caching processor multiprocessing numa mesi

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

谢谢.

小智 5

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

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


谈谈你的问题

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

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

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

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

  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厘米,或5厘米用于往返,信号不会以光速传播.
    此外,当只有内核访问缓存时,设计人员可以根据内核的内部架构进行一些优化.如果核心属于另一个可能不同的CPU,则这是不可能的.
  4. 这很复杂.
    让多个CPU访问缓存需要复制大量电路,例如缓存关联,这意味着当请求地址时,必须在一组可能的候选者之间验证标签,并且必须复制该电路以允许其他CPU以异步方式读/写缓存.

简而言之:可以直接连接缓存,对于分立组件来说这是不值得的.它适用于集成组件.