Warum verwendet GCC mov / mfence anstelle von xchg, um C11s atomic_store zu implementieren?

9

In C ++ und Beyond 2012: Herb Sutter - atomare & lt; & gt; Waffen, 2 von 2 Herb Sutter argumentiert (um 0:38:20), dass man xchg , nicht mov / mfence verwenden sollte, um atomic_store auf x86 zu implementieren. Er scheint auch vorzuschlagen, dass diese bestimmte Instruktionsfolge das ist, was alle zustimmen. Allerdings verwendet GCC letzteres. Warum verwendet GCC diese spezielle Implementierung?

    
tibbe 23.07.2014, 12:02
quelle

1 Antwort

1

Ganz einfach, die Methode mov und mfence ist schneller, da sie keinen redundanten Speicher auslöst, der wie xchg gelesen wird, was Zeit braucht. Die x86-CPU garantiert eine strenge Reihenfolge der Schreibvorgänge zwischen Threads, also ist es genug.

Beachten Sie, dass einige sehr alte CPUs einen Fehler in der mov -Anweisung haben, der xchg notwendig macht, aber dies ist von sehr langer Zeit her und die Arbeit ist nicht den Overhead für die meisten Benutzer wert.

Kredit an @amdn für die Information über den Fehler in alten Pentium CPUs, der xchg in der Vergangenheit benötigt.

    
Vality 12.08.2014, 12:32
quelle

Tags und Links