如果CPU内核使用写入缓冲区,则负载可以将最近的存储从写入缓冲区旁路到引用的位置,而不必等到它出现在缓存中。但是,因为它是写在A Primer on Memory Consistency and Coherence,如果CPU荣誉TSO内存模型,然后为什么不能通过写入缓冲区绕过由同一内核上的另一个线程写入的值?
...多线程引入了TSO一个微妙的写缓存的问题。 TSO 写入缓冲区对于每个线程环境(虚拟 核心)在逻辑上是私有的。因此,在多线程内核中,一个线程上下文决不应该绕过另一个线程上下文的写入缓冲区。可以利用每个线程上下文写入缓冲器 或更通常地通过使用具有线程上下文标识符标记的条目的共享写入缓冲器来实现该逻辑分隔,该线程上下文标识符仅当标签 匹配时才允许旁路。
我无法理解这种限制的必要性。当允许某个线程绕过由同一个内核上的另一个线程写入的写入缓冲区条目导致违反TSO内存模型时,您能否给我举一个例子?
我投票结束这个问题作为题外话题,因为它是关于计算机处理器设计,而不是编程。 –
OP已经恰当地标记了问题,我会说它是一个有效的问题,所以不要关闭它。 –
我认为它的存在是因为,存储缓冲区中的数据没有通过一致性协议,因此允许另一个线程在使其全局可见之前尽早看到写入可能是违规行为。考虑一个4线程的情况,其中两个线程修改相同的位置,另外两个线程尝试读取它。 [我的知识在编写缓冲区时有点生疏,我拉着头发去了解上述场景中写入的内容,大概是必须重做] –