【发布时间】:2020-11-23 17:17:51
【问题描述】:
在总存储顺序 (TSO) 内存一致性模型下,x86 cpu 将有一个写入缓冲区来缓冲写入请求,并且可以从写入缓冲区处理重新排序的读取请求。它表示写缓冲区中的写请求将退出并按FIFO顺序向缓存层次结构发出,这与程序顺序相同。
我很好奇:
为了服务从写缓冲区发出的写请求,L1缓存控制器是否处理写请求,完成写请求的缓存一致性,并按照与发出顺序相同的顺序将数据插入L1缓存?
【问题讨论】:
-
跟随TSO,看来L1缓存也应该按顺序处理存储请求。
-
finish the cache coherence of the write requests是什么意思?但是,是的,存储数据进入 L1 缓存并在 x86 上按顺序全局可见,因为存储退出。在商店准备退役之前,它的数据只存在于store queue 中,这不是全局可见的,并且只会被当前核心的负载窥探。如果我找不到现有的重复问题,我会将其作为答案发布。 -
我在How does memory reordering help processors and compilers? 的回答中对此进行了详细介绍。查看“实际 CPU 的工作原理”部分。
-
为什么我指出“完成写请求的缓存一致性”是因为我认为只有在缓存一致性之后,数据才能全局可见,在这一点之后,其他核心可以得到更新缓存一致性数据,如监听协议。
-
为什么我对这个问题感到困惑是缓存控制器可以以非阻塞方式处理请求。但是,为了符合 TSO 并确保数据在多核系统上全局可见,缓存控制器是否应该遵循存储顺序?因为如果在核心 1 上有两个变量 A 和 B 被顺序更新,核心 2 从核心 1 获取更新的 B,那么核心 2 也必须能看到更新的 A。为了实现这一点,我认为核心上的私有缓存层次结构1 必须按顺序完成变量 A 和 B 的缓存一致性并使它们全局可见。我说的对吗?
标签: x86 hardware cpu-architecture cpu-cache memory-barriers