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

问题描述 投票:2回答:2

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

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

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

合乎逻辑的结论是

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

然而,他们说,在几段之后,当讨论复制作为强制一致性的计划时

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

我的解释是,将数据复制到本地缓存允许多核处理器减少延迟(因为数据局部性 - 数据非常接近处理器)。我同意这一部分。但是,我不清楚为什么有contention for a read shared data item。这似乎意味着RAR (Read after Read)数据危害,我知道它并不存在。

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

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

caching distributed-computing cpu-architecture
2个回答
2
投票

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


2
投票

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

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

内存预计具有可变延迟,因此无法精确调度。这只是一个古老的争论。

© www.soinside.com 2019 - 2024. All rights reserved.