【问题标题】:Contention for read shared data in memory?争用内存中的读取共享数据?
【发布时间】:2023-04-04 12:27:01
【问题描述】:

我目前正在研究 Hennessy 和 Patterson 撰写的 Computer Architecture: A Quantitative Approach 在第 5 章(线程级并行)中,他们讨论了多处理的缓存一致性和复制。他们要求我们通过建立一个用例来做出以下假设:

在我教科书的前几页,他们告诉读者做出以下假设:

  1. 处理器 A 写入内存位置 X
  2. 处理器 A 写入内存位置 Y
  3. 处理器 C 从内存位置 Y 读取将看到正确的值 - 这意味着 处理器 C 也将看到内存位置的正确值 X

合乎逻辑的结论是

这些限制允许处理器重新排序读取,但强制 处理器按程序顺序完成写入。

然而,几段之后,当讨论复制作为一种强制一致性的方案时,他们说

复制减少了访问延迟和读取争用 共享数据项。

我的解释是,将数据复制到本地缓存允许多核处理器减少延迟(因为数据局部性 - 数据明显更接近处理器)。我同意那部分。但是,我不清楚为什么会有contention for a read shared data item。这似乎暗示了RAR (Read after Read) 数据危险,我知道这并不真正存在。

除非处理器尝试写入共享内存位置,否则为什么在读取共享数据项时会出现任何形式的争用?

编辑: StackOverflow 上有很多关于线程争用的帖子,包括 What is thread contention?。但这些几乎都是以独占式的锁为例。我的理解是锁是一种用于强制一致性的高级应用程序模式。此外,我看到的所有答案示例都涉及对目标数据项的某种修改(写入)。

【问题讨论】:

    标签: caching distributed-computing cpu-architecture


    【解决方案1】:

    任何内存结构都有有限数量的访问或读取端口,它们代表允许您读取或写入数据的物理线路。如果只有一个读取端口,但多个代理可能同时从内存中读取,那么它们将争用该端口,因为它们一次只能使用一个。减少争用和提高整体带宽的方法之一是在具有单独访问端口的单独物理结构中复制数据。例如,每个核心可能有自己的私有缓存,其中可能存在同一缓存行的多个副本。在这样的设计中,每个内核都可以独立访问其缓存行的副本。

    【讨论】:

      【解决方案2】:

      多个核心竞争读取某些内容不是数据风险(正确性问题),它更像是结构性风险(有限的读取端口)。当多个内核不想读取相同的数据时,内存/缓存总线不会进行多播。

      但这仍然是术语的延伸:“结构性危害”通常意味着在单个核心内,例如一个除法器 ALU 在开始一个新的除法后的几个周期内无法开始一个新的除法,因此背靠背独立的div 指令仍然必须停止。

      内存预计会有可变的延迟,因此不能精确地安排。这只是简单的老争论。

      【讨论】:

        猜你喜欢
        • 2012-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-22
        • 1970-01-01
        • 2011-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多