GCCs Neuordnung von Lese- / Schreibanweisungen

Die Synchronisationsprimitive von Linux (Spinlock, Mutex, RCUs) verwenden Speicherbarriereanweisungen, um zu verhindern, dass die Speicherzugriffsanweisungen neu sortiert werden. Und diese Neuordnung kann entweder von der CPU selbst oder vom Compiler vorgenommen werden.

Kann jemand einige Beispiele für von GCC erstellten Code zeigen, in denen eine solche Neuordnung durchgeführt wird? Ich interessiere mich hauptsächlich für x86. Ich frage dies, um zu verstehen, wie GCC entscheidet, welche Anweisungen nachbestellt werden können. Unterschiedliche x86-Mikroarchitekturen (z. B. Sandy Bridge oder Ivy Bridge) verwenden unterschiedliche Cache-Architekturen. Daher frage ich mich, wie GCC eine effektive Neuordnung vornimmt, die die Ausführungsleistung unabhängig von der Cache-Architektur verbessert. Einige Beispiele für C-Code und neu geordneten GCC-generierten Code wären sehr nützlich. Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage