Wenn ein CPU-Kern einen Schreibpuffer verwendet, kann der Ladevorgang den letzten Speicher an den referenzierten Speicherort aus dem Schreibpuffer umleiten, ohne zu warten, bis er im Cache angezeigt wird. Aber, wie es in A Primer on Memory Consistency and Coherence, wenn die CPU ehrt TSO-Speichermodell geschrieben, dannWarum kann ein Ladevorgang einen von einem anderen Thread auf demselben Core geschriebenen Wert nicht aus einem Schreibpuffer umgehen?
... Multithreading stellt einen subtilen Schreibpuffer Problem für TSO. TSO Schreibpuffer sind logisch privat für jeden Threadkontext (virtueller Kern). Daher sollte bei einem Multithread-Kern ein Threadkontext niemals aus dem Schreibpuffer eines anderen Threadkontexts umgehen. Diese logische Trennung kann mit pro-Thread-Kontext-Schreibpuffern implementiert werden, oder häufiger durch die Verwendung eines gemeinsamen Schreibpuffers mit Einträgen durch Thread-Kontext-IDs, die nur umgehen, wenn Tags übereinstimmen.
Ich kann die Notwendigkeit dieser Beschränkung nicht erfassen. Könnten Sie mir bitte ein Beispiel geben, wenn Sie zulassen, dass ein Thread einen Schreibpuffereintrag umschreibt, der von einem anderen Thread auf demselben Kern geschrieben wurde, der zur Verletzung des TSO-Speichermodells führt?
Ich stimme, diese Frage als Off-Topic zu schließen, weil es um Computer-Prozessor-Design geht, nicht um Programmierung. –
OP hat die Frage passend markiert, ich würde sagen, es ist eine gültige Frage, also schließe sie nicht. –
Ich denke, es ist da, da Daten im Speicherpuffer nicht durch das Kohärenzprotokoll laufen, was es einem anderen Thread ermöglicht, Schreibvorgänge früh zu sehen, bevor sie global sichtbar gemacht werden, könnte eine Verletzung sein. Stellen Sie sich eine Situation mit vier Threads vor, bei der zwei Threads den gleichen Speicherort ändern und zwei andere versuchen, sie zu lesen. [Mein Wissen ist ein wenig rostig auf Schreibpuffer, ich ziehe mir die Haare, um zu verstehen, was mit den Schreibvorgängen im obigen Szenario passiert, vermutlich muss man noch einmal überarbeitet werden] –