Wie häufig fehlen alten x64-Prozessoren die Anweisung cmpxchg16b?

8

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?

Christopher Barber
quelle
12
Ihr wichtigster Kunde hat sicherlich einen in einem seiner kritischen Produktionsserver, der nur für wichtige Aufgaben an Heiligabend verwendet wird, aber nirgendwo anders und absolut nicht in der Testumgebung ...
7
Ich denke nicht, dass dies auf Superuser migriert werden sollte. Es stellt nur sicher, dass weniger Personen, die die Antwort kennen, diese Frage jemals sehen werden.
Christopher Barber

Antworten:

6

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.

Yuhong Bao
quelle
4

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, CMPXCHG16Bindem geprüft wird, ob CPUID.01h.ECX.bit13ist 1(verfügbar) oder 0(nicht verfügbar).

Beachten Sie auch, dass in den Intel-Handbüchern empfohlen wird, diese Anweisung mit dem LOCKPräfix zu kombinieren, damit sie atomar ausgeführt werden kann .


quelle
Ja, ich weiß, wie man das CPU-Ergebnis überprüft. Das Problem ist, was zu tun ist, wenn es nicht unterstützt wird. Ich würde lieber keine Zeit damit verschwenden, eine fehlende Anweisung zu umgehen, wenn ich diesen Fall in der Praxis nie sehen werde.
Christopher Barber
@Christopher Barber - CPUID wird seit Ende 486 Prozessoren unterstützt, was auch impliziert, dass jeder 64-Bit-fähige x86-Prozessor CPUID unterstützt.
2
@PhiS: Ich bin mir ziemlich sicher, dass Christopher über die mangelnde Unterstützung für cmpxchg16b gesprochen hat. Was tun, wenn das fehlt
Bahbar
3

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.

Fizz
quelle