【问题标题】:Can multiple CPUs simultaneously write to the same RAM location?多个 CPU 可以同时写入同一个 RAM 位置吗?
【发布时间】:2009-02-05 17:30:50
【问题描述】:

机器字长(或更小)的写入是否序列化?只需一个本机操作码即可将寄存器内容复制到 RAM。

【问题讨论】:

    标签: architecture memory synchronization cpu


    【解决方案1】:

    将数据写入 RAM 是原子操作。如果两个 CPU 尝试同时写入同一位置,内存控制器将决定写入的某些顺序。当一个 CPU 正在写入内存时,另一个 CPU 将根据需要停止尽可能多的周期,直到第一次写入完成;然后它将覆盖其值。这就是所谓的race condition

    小于本机字大小的写入不是原子的——在这种情况下,CPU 必须将旧内存值读入寄存器,将新字节写入寄存器,然后将新值写回内存.

    你永远不应该有依赖于此的代码——如果你有多个 CPU 试图同时写入同一个内存位置,那么你做错了什么。

    另一个重要的考虑因素是cache coherency 问题。每个 CPU 都有自己的缓存。如果一个 CPU 将数据写入其缓存,则需要让其他 CPU 知道该数据值的更改才能读取它。

    【讨论】:

    • 读操作呢?内存控制器会再次决定谁先读取还是两个人可以同时读取?
    • 请注意,内存控制器仅在最终驱逐脏缓存行时才重要。 CPU 内核在获得独占所有权后只能首先写入缓存行 (MESI)。 CPU 始终保持缓存一致性,因此内核之间的争用意味着它们必须等待其 RFO(读取所有权)的确认,然后才能将存储从存储缓冲区提交到 L1d 缓存。
    • 此外,窄存储可能需要一个额外的周期来提交缓存(在大多数非 x86 ISA 上很常见),但这 不是 明显非原子的,不像由软件。请参阅Can modern x86 hardware not store a single byte to memory?,它揭穿了所有具有字节存储的 ISA 的声明,而不仅仅是 x86。
    【解决方案2】:

    没有什么可以阻止您在低级别上执行此操作。然而,RAM 写入是原子的,因此内存控制器将按顺序从内核执行 2 次看似相似的写入。

    【讨论】:

    • 其实这只适用于同一个 CPU 上的内核,而不适用于单独的 CPU,对吧?
    • AFAIR,这取决于实现。内存控制器最终决定如何将数据写入 RAM。 CPU只是向它发出命令并通过数据总线提供数据并通过地址总线提供地址。
    • @T.E.D.:是的,单独的内存控制器(或同一控制器的通道)并行运行。这个问题询问从多个内核写入的“相同的内存位置”,任何给定的位置都将位于一个特定的 DIMM 上。 (除非我们谈论的是跨两个缓存行拆分的未对齐的多字节内容)。
    【解决方案3】:

    两个 CPU 可以同时发出命令,但是 RAM 控制器不是必须单独处理它接收到的每个命令吗?所以,也许对 CPU 来说它是同时的,但是 RAM 控制器会决定先处理谁的命令。

    【讨论】:

      【解决方案4】:

      他们不应该这样做,因为如果写入不同的值,生成的 RAM 内容将是未指定的。

      【讨论】:

      • 其实就是提交给内存控制器写流水线的最新数据寄存器的值
      • @xelurg:我同意。但是在那种情况下,实际的写入不是同时的(因为它们必须是流水线的)。换句话说,为同一内存设置两个独立的写入管道是没有意义的。
      【解决方案5】:

      与直接写入 RAM 相比,本机操作码不是更有可能写入 CPU 上的缓存吗?

      【讨论】:

      • CPU缓存不是直写的吗?它在原子性的上下文中重要吗?
      • 我认为您指的是微码,它是应用于 CPU 内元素的一组信号电平......操作码是更高级别 - 它可以对各种元素集进行操作,包括内存和 I/O 端口。 en.wikipedia.org/wiki/Opcode
      • 忘记包含微码简介的链接 :) en.wikipedia.org/wiki/Microcode
      • yabcok:我的意思是 ChrisW 在说操作码更有可能写入缓存而不是 RAM 时指的是微码
      • "CPU 缓存不是直写的吗?"谷歌搜索表明写入可以是“回写”而不是“直写”,并且某些(英特尔)CPU 使用混合“回写”和“直写”。操作码不像过去那样与硬件级别发生的事情是一对一的。
      【解决方案6】:

      他们可以尝试,但硬件将是最终决定因素。

      【讨论】:

      • 这仍然取决于硬件,我所说的硬件是指 CPU 与内存的接口方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多