【发布时间】:2023-04-04 12:27:01
【问题描述】:
我目前正在研究 Hennessy 和 Patterson 撰写的 Computer Architecture: A Quantitative Approach 在第 5 章(线程级并行)中,他们讨论了多处理的缓存一致性和复制。他们要求我们通过建立一个用例来做出以下假设:
在我教科书的前几页,他们告诉读者做出以下假设:
- 处理器 A 写入内存位置 X
- 处理器 A 写入内存位置 Y。
- 处理器 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