争用内存中的读取共享数据?

时间:2019-03-02 17:15:07

标签: caching distributed-computing cpu-architecture

我目前正在通过Henemy和Patterson的计算机体系结构:定量方法进行工作。在第5章(线程级并行性)中,他们讨论了缓存一致性和多处理复制。他们要求我们通过设置用例做出以下假设:

我的课本前面几页,它们告诉读者做出以下假设:

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

逻辑结论是

  

这些限制允许处理器重新排列读取顺序,但会强制   处理器以程序顺序完成写操作。

但是,在随后的几段中,当他们讨论将复制作为实施一致性的方案时,他们说

  

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

我的解释是,将数据复制到本地缓存可以使多核处理器减少延迟(由于数据的局部性-数据距离处理器更近)。我同意这一部分。但是,我不清楚为什么会有contention for a read shared data item。这似乎暗示着RAR (Read after Read)数据危险,我知道这确实不存在。

除非处理器正在尝试写入共享内存位置,否则为什么在读取共享数据项时会发生任何争执?

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

但这仍在扩展术语:“结构性危害”通常是指在一个核心内,例如一个分频器ALU在开始一个分频器后的几个周期内无法启动新的除法器,因此背靠背的独立div指令仍然必须停顿。

预计内存 具有可变的延迟时间,因此无法精确安排时间。这只是普通的争论。