为什么不能提供从一个处理器到另一个处理器的高速缓存的直接访问?
Why can't be provided a direct access from one processor to the cache of another processor?
在 NUMA 架构(非统一内存访问)中,每个处理器都有自己的一级缓存,因此有一个用于处理器通信的协议 (MESI)。但是为什么每个处理器不能直接连接到其他的缓存呢?我读到 "The connection simply isn't fast enough",但这并没有解释太多。
谢谢。
首先,拥有一级缓存并不意味着NUMA架构,主板拓扑结构仍然是构成机器的主要元素UMA 或 NUMA。
其次,使用的 Cache Coherence 协议依赖于体系结构,可能与 MESI 不同(实际上 MESIF 是一个更好的适用于 NUMA 机器)。
转向你的问题
每个处理器都可以彼此连接 处理器缓存。事实上,每个缓存一致性协议都是这样做的,只是不允许直接 read/write 因为它需要 很多努力,可重用性很差 。
然而,可以将 CPU 直接连接到另一个 CPU 缓存,实际上它是在 Intel CPUs 上以某种方式实现的。
逻辑内核(即超线程内核)可能共享 L2 缓存,同一包中的某些物理内核可能共享 L3 缓存。
但是这里有两个重要的方面:首先,共享缓存的 CPU 数量很少,其次它们在同一个 core/package 。
直接连接所有缓存将失去内部 CPU(作为一个整体)和外部[=]之间的界限CPU.
的 82=]
隔离 CPU 让我们创建非常可定制和模块化的系统,外部协议是一个让我们隐藏实现细节的接口,这比紧密连接的缓存提供的速度增益更有价值。
当我们需要这样的速度时,我们构建 专用集成系统组件 ,就像 coprocessor.
缓存不直接连接的原因有很多,我不能代表行业领导者,但这里有一些通用的想法。
- 不缩放。
2 个处理器表示 1 link,3 个处理器表示 3 link,4 个处理器表示 6 link,依此类推。
n 处理器需要 C(n, 2) links 即 n * (n-1) / 2 links.
此外,您只能连接具有兼容缓存接口的 CPUs,这可能意味着您只能连接相同的 CPUs。缓存架构是经常变化的东西,行可能会变得更大,关联性可能会改变,信号的时序可能会更快。
最后,如果 CPU 有足够的引脚连接到另外四个 CPU,您只能创建四 cpu 系统。
- 需要很多针脚.
Givin 访问缓存需要很多引脚,每个内核有两个或三个缓存,每个都需要寻址和控制,这需要暴露很多引脚,串行接口不是一个选项,因为它太慢了.
如果您添加每个处理器必须相互连接,那么引脚数量将呈二次方增长。
如果你在缓存之间使用共享总线,你实际上是在使用像 MESI 这样的协议,一个试图避免总线拥塞的协议,因为即使你有很少的 CPUs共享总线上的流量非常大,等待轮到它使用它所花费的时间会减慢 CPU(即使有存储缓冲区和失效队列)。
- 速度慢。
缓存与内核高度集成,它可能支持多个 read/write 端口和其他增加并行化的接口。如果没有大量引脚(以及尺寸和成本的巨大增加),所有这些都无法从 package/core 中暴露出来。
缓存在物理上靠近核心,这最大限度地减少了传播延迟,考虑到 3GHz CPU 的周期是 1/3 * 10^- 9,在那个时间内光最多可以传播10厘米,或者5厘米来回,并且信号不会以光速传播。
此外,当一个缓存只被一个核访问时,设计者可以根据核的内部架构进行一些优化。如果核心属于另一个,可能不同,CPU,这是不可能的。
- 复杂。
让缓存被多个 CPU 访问需要复制很多电路,例如缓存关联,这意味着当请求地址时,必须在一组可能的候选者之间验证标签,并且该电路必须被复制以允许其他人 CPU 异步地 read/write 缓存。
如此简单:直接连接缓存是可能的,只是对于分立组件来说不值得。为集成组件完成.
在 NUMA 架构(非统一内存访问)中,每个处理器都有自己的一级缓存,因此有一个用于处理器通信的协议 (MESI)。但是为什么每个处理器不能直接连接到其他的缓存呢?我读到 "The connection simply isn't fast enough",但这并没有解释太多。
谢谢。
首先,拥有一级缓存并不意味着NUMA架构,主板拓扑结构仍然是构成机器的主要元素UMA 或 NUMA。
其次,使用的 Cache Coherence 协议依赖于体系结构,可能与 MESI 不同(实际上 MESIF 是一个更好的适用于 NUMA 机器)。
转向你的问题
每个处理器都可以彼此连接 处理器缓存。事实上,每个缓存一致性协议都是这样做的,只是不允许直接 read/write 因为它需要 很多努力,可重用性很差 。
然而,可以将 CPU 直接连接到另一个 CPU 缓存,实际上它是在 Intel CPUs 上以某种方式实现的。
逻辑内核(即超线程内核)可能共享 L2 缓存,同一包中的某些物理内核可能共享 L3 缓存。
但是这里有两个重要的方面:首先,共享缓存的 CPU 数量很少,其次它们在同一个 core/package 。
直接连接所有缓存将失去内部 CPU(作为一个整体)和外部[=]之间的界限CPU.
的 82=]
隔离 CPU 让我们创建非常可定制和模块化的系统,外部协议是一个让我们隐藏实现细节的接口,这比紧密连接的缓存提供的速度增益更有价值。
当我们需要这样的速度时,我们构建 专用集成系统组件 ,就像 coprocessor.
缓存不直接连接的原因有很多,我不能代表行业领导者,但这里有一些通用的想法。
- 不缩放。
2 个处理器表示 1 link,3 个处理器表示 3 link,4 个处理器表示 6 link,依此类推。
n 处理器需要 C(n, 2) links 即 n * (n-1) / 2 links.
此外,您只能连接具有兼容缓存接口的 CPUs,这可能意味着您只能连接相同的 CPUs。缓存架构是经常变化的东西,行可能会变得更大,关联性可能会改变,信号的时序可能会更快。
最后,如果 CPU 有足够的引脚连接到另外四个 CPU,您只能创建四 cpu 系统。 - 需要很多针脚.
Givin 访问缓存需要很多引脚,每个内核有两个或三个缓存,每个都需要寻址和控制,这需要暴露很多引脚,串行接口不是一个选项,因为它太慢了.
如果您添加每个处理器必须相互连接,那么引脚数量将呈二次方增长。
如果你在缓存之间使用共享总线,你实际上是在使用像 MESI 这样的协议,一个试图避免总线拥塞的协议,因为即使你有很少的 CPUs共享总线上的流量非常大,等待轮到它使用它所花费的时间会减慢 CPU(即使有存储缓冲区和失效队列)。 - 速度慢。
缓存与内核高度集成,它可能支持多个 read/write 端口和其他增加并行化的接口。如果没有大量引脚(以及尺寸和成本的巨大增加),所有这些都无法从 package/core 中暴露出来。
缓存在物理上靠近核心,这最大限度地减少了传播延迟,考虑到 3GHz CPU 的周期是 1/3 * 10^- 9,在那个时间内光最多可以传播10厘米,或者5厘米来回,并且信号不会以光速传播。
此外,当一个缓存只被一个核访问时,设计者可以根据核的内部架构进行一些优化。如果核心属于另一个,可能不同,CPU,这是不可能的。 - 复杂。
让缓存被多个 CPU 访问需要复制很多电路,例如缓存关联,这意味着当请求地址时,必须在一组可能的候选者之间验证标签,并且该电路必须被复制以允许其他人 CPU 异步地 read/write 缓存。
如此简单:直接连接缓存是可能的,只是对于分立组件来说不值得。为集成组件完成.