Die Anweisung cmpxchg16b für den atomaren 128-Bit-Speicheraustausch wird auf alten Versionen des x64-Prozessors nicht unterstützt, scheint jedoch seit einigen Jahren von neueren Versionen des Prozessors unterstützt zu werden. Wie wahrscheinlich ist es, dass ich auf einen 64-Bit-Computer mit einem alten Prozessor stoße, dem diese Anweisung fehlt?
8
Antworten:
Sie sehen sich frühe AMD 64-Bit-Prozessoren vor Rev F an (wenn sie in den DDR2-Speicher verschoben wurden). Es gibt auch einige frühe D-Intel Noconas, die es nicht unterstützt haben, denke ich, aber diese sind seltener.
quelle
Ich habe keine Daten zur Verbreitung bestimmter CPU-Typen, daher kann ich Ihre Frage nicht direkt beantworten. Sie können jedoch , ob die CPU - Halterungen herausfinden,
CMPXCHG16B
indem geprüft wird, obCPUID.01h.ECX.bit13
ist1
(verfügbar) oder0
(nicht verfügbar).Beachten Sie auch, dass in den Intel-Handbüchern empfohlen wird, diese Anweisung mit dem
LOCK
Präfix zu kombinieren, damit sie atomar ausgeführt werden kann .quelle
Die Unterstützung in der CPU reicht möglicherweise nicht aus, wie einige Core 2-Benutzer beim Start von Windows 8.1 herausfanden, insbesondere diejenigen mit einem Intel DP35DP-Motherboard.
Ich bin mir noch nicht sicher, was auf dem Motherboard CMPXCHG16B am Funktionieren hindern könnte. Wahrscheinlich können die Feature-Erkennungsbits vom BIOS deaktiviert werden.Um zusammenzufassen, was Yuhong Baos Blog dazu sagt, gab es in frühen Core 2-Chips (E0 / R0-Stufen des 45-nm-Core 2) Prozessorfehler, die dazu führten, dass ihre Funktionen über die CPUID falsch gemeldet wurden. Soweit ich das beurteilen kann, konnte dies per BIOS / Mikrocode-Update umgangen werden.quelle