Ausrichtungsanforderungen für das Atom x86-Instruktionen
-
06-07-2019 - |
Frage
Microsoft bietet die InterlockedCompareExchange
Funktion zur Durchführung eines atomaren Vergleichs- und Swap-Operationen. Es gibt auch eine _InterlockedCompareExchange
Eigen .
Auf x86 diese umgesetzt werden, um die cmpxchg
Anweisung verwendet wird.
Doch auf diese drei Ansätze durch die Dokumentation zu lesen, sie scheinen nicht auf die Ausrichtungsanforderungen zu vereinbaren.
Intel Referenzhandbuch nichts über die Ausrichtung sagt (ausgenommen , wenn Ausrichtung Prüfung aktiviert ist und ein nicht ausgerichteter Speicher Bezug genommen wird, wird eine Ausnahme erzeugt wird)
Ich sah auch den lock
Präfix auf, in dem es heißt insbesondere, dass
Die Integrität des LOCK-Präfix ist nicht durch die Ausrichtung des Speicherfeldes beeinflußt.
(Hervorhebung von mir)
So Intel scheint zu sagen, dass die Ausrichtung keine Rolle spielt. Der Betrieb wird atomar sein, egal was.
Die _InterlockedCompareExchange
intrinsische Dokumentation sagt auch nichts über die Ausrichtung, aber die InterlockedCompareExchange
Funktion besagt, dass
Die Parameter für diese Funktion müssen auf einer 32-Bit-Grenze ausgerichtet sein; andernfalls wird verhält sich die Funktion unvorhersehbar auf Multi-Prozessor x86-Systeme und alle Nicht-x86-Systemen.
Also, was soll das?
Sind die Ausrichtungsanforderungen für InterlockedCompareExchange
nur, um sicherzustellen, wird die Funktion arbeiten, auch auf pre-486-CPU, wo der cmpxchg
Befehl nicht verfügbar ist?
Das scheint wahrscheinlich auf der Grundlage der oben genannten Informationen, aber ich möchte sicher sein, bevor ich auf sie verlassen. :)
oder Ausrichtung wird durch die ISA erforderlich Unteilbarkeit zu gewährleisten, und ich bin nur die falschen Orte in Intels Referenzhandbücher?
Lösung
Die PDF Sie zitiert werden von 1999 ist und eindeutig veraltet.
Die up-to-date Intel Dokumentation , insbesondere Volume-3A erzählt eine andere Geschichte.
Zum Beispiel auf einem Core-i7-Prozessor, Sie müssen noch sicherstellen, dass Ihre Daten nicht Cache-Zeilen nicht nicht überspannen, oder aber die Funktion nicht garantiert atomar sein.
Auf Band 3A, Systemprogrammierung, für x86 / x64 Intel eindeutig fest:
8.1.1 Garantierte atomare Operationen
Der Intel486 Prozessor (und neuere Prozessoren da) garantiert, dass folgende Grundspeicheroperationen immer atomar ausgeführt werden:
- Beim Lesen oder Schreiben eines Byte
- Beim Lesen oder ein Wort auf einer 16-Bit-Grenze ausgerichtet Schreiben
- Beim Lesen oder ein Doppelwort auf einer 32-Bit-Grenze ausgerichtet Schreiben
Der Pentium-Prozessor (und neuere Prozessoren da) garantiert, dass folgende zusätzliche Speicheroperationen atomar immer durchgeführt werden:
- Beim Lesen oder ein-fach-Wort auf einer 64-Bit-Grenze ausgerichtet Schreiben
- 16-Bit-Zugriffe auf nicht gecachten Speicherstellen, die innerhalb eines 32-Bit-Datenbus passen
Die P6 Familie Prozessoren (und neuere Prozessoren da) gewährleisten, dass folgende zusätzliche Speicheroperation atomar wird immer durchgeführt:
- Unaligned 16-, 32- und 64-Bit-Zugriffe auf zwischengespeicherte Speicher, die in einem Cache passen line
Greift zu zwischenspeicherbar Speicher, der über Cache-Zeilen und Seitengrenzen aufgeteilt werden sind nicht als Atom durch den Intel Core 2 Duo, Intel® Atom ™, Intel Core garantiert Duo, Pentium M, Pentium 4, Intel Xeon, P6 Familie, Pentium und Intel486 Prozessoren. Der Intel Core 2 Duo, Intel Atom, Intel Core Duo, Pentium M, Pentium 4, Intel Xeon, und P6 Familie Prozessoren bieten Bussteuersignale die externen Speicher zulassen Subsysteme Split greift Atom zu machen; jedoch greift nonaligned Daten ernsthaft die Leistung des Prozessors auswirken und sollte vermieden werden
Andere Tipps
x86 hat nicht erfordern Ausrichtung für die cmpxchg
Anweisung. Die Angleichung wird für Leistung empfohlen. Dies sollte keine Überraschung sein, die Abwärtskompatibilität bedeutet, dass Software vor noch mit einem manuellen ab 14 Jahren geschrieben wird auf dem heutigen Prozessoren ausgeführt werden.
Warum genau Microsoft Ausrichtung erfordert, ist aus ihrer Dokumentation nicht klar. Es kann für die Leistung oder für die Unterstützung RISC-Architekturen oder beides.
Intel® 64 und IA-32 Architektur Software Developer Benutzerhandbuch
Volume 3 (3A): System Programming Guide
Januar 20138.1.2.2 Software Controlled Bus Locking
explizit auf die LOCK-Semantik zu erzwingen, kann die Software den LOCK-Präfix mit den folgenden Anweisungen verwenden, wenn sie verwendet wird, einen Speicherort zu ändern. [...]
• Die Austauschanweisungen (XADD, cmpxchg und CMPXCHG8B).
• Der LOCK-Präfix wird automatisch für XCHG Anweisung angenommen.
• [...][...] Die Integrität eines Busses Sperre nicht durch die Ausrichtung der Betroffenen Speicherfeld. Die LOCK-Semantik für so viele Buszyklen gefolgt wie notwendig, den gesamten Operanden zu aktualisieren. Es ist jedoch empfohlen dass Gesperrte Zugriffe auf ihre natürlichen Grenzen für besser ausgerichtet werden Systemleistung:
• Jede Grenze für einen 8-Bit-Zugriff (gesperrt oder anderweitig).
• 16-Bit-Grenze für gesperrte Wortzugriffe.
• 32-Bit-Grenze für gesperrte Doppelwort zugreift.
• 64-Bit-Grenze für gesperrte fach-Wort zugreift.
diese Frage SO : natürliche Ausrichtung ist wichtig für die Leistung und auf die erforderliche x64-Architektur (so ist es nicht nur PRE-x86-Systeme, aber POST-x86 diejenigen zu - x64 kann immer noch ein bisschen wie ein Nischen Fall sein, aber es wächst in der Popularität nach all ;-); das auch sein mag, warum Microsoft Dokumente es nach Bedarf (Fest docs zu finden, ob MS die Ausrichtung Problem zu erzwingen, indem ermöglicht Ausrichtung Prüfung entschieden hat - die von Windows-Version variieren, indem sie in der Dokumentation behauptet, dass die Ausrichtung erforderlich ist, MS hält die Freiheit, die sie in irgendeiner Version von Windows selbst zu zwingen, wenn sie es nicht auf andere zwingen haben).
Microsofts Verschlungene APIs auch auf ia64 angewendet (während es noch existierte). Es gab kein Schloss Präfix auf ia64, nur die cmpxchg.acq und cmpxchg.rel Anweisungen (oder fetchadd und andere ähnliche beasties), und diese alle erforderlichen Ausrichtung, wenn ich mich richtig erinnere.