Wie verbreitet sind alte x64-Prozessoren, denen die Anweisung cmpxchg16b fehlt?

7872
Christopher Barber

Die cmpxchg16b-Anweisung für atomaren 128-Bit-Speicheraustausch wird von älteren Versionen des x64-Prozessors nicht unterstützt. Es scheint jedoch, dass dies seit einigen Jahren von neueren Versionen des Prozessors unterstützt wird. Wie wahrscheinlich ist es, dass ich auf einem 64-Bit-Computer mit einem alten Prozessor stecke, dem diese Anweisung fehlt?

8
Ihr wichtigster Kunde hat sicherlich einen von denen auf einem seiner kritischen Produktionsserver, der nur für wichtige Aufgaben an Heiligabend verwendet wird, aber nirgendwo sonst und absolut nicht in der Testumgebung ... vor 13 Jahren 12
Ich denke nicht, dass die Frage zum Superuser hätte migriert werden sollen. Es stellt nur sicher, dass weniger Personen, die die Antwort kennen, diese Frage jemals sehen werden. Christopher Barber vor 13 Jahren 7

3 Antworten auf die Frage

5
Yuhong Bao

Sie betrachten frühe AMD-64-Bit-Prozessoren vor Rev. F (dies ist der Zeitpunkt, zu dem sie in den DDR2-Speicher verschoben wurden). Es gibt auch ein paar frühe D-Intel Noconas, die ihn nicht unterstützten, denke ich, aber diese sind seltener.

3

Ich habe keine Daten bezüglich der Verbreitung bestimmter Arten von CPUs, daher kann ich Ihre Frage nicht direkt beantworten. Allerdings können Sie herausfinden, ob die CPU unterstützt CMPXCHG16Bdurch Prüfen, ob CPUID.01h.ECX.bit13ist 1(verfügbar) oder 0(nicht verfügbar).

Beachten Sie auch, dass die Handbücher von Intels vorsehen, dass Sie diese Anweisung mit dem LOCKPräfix kombinieren müssen, um diese Anweisung atomar auszuführen .

Ja, ich weiß, wie man das Ergebnis von cpuid überprüft. Das Problem ist, was zu tun ist, wenn es nicht unterstützt wird. Ich würde lieber keine Zeit damit verschwenden, einen fehlenden Unterricht zu bearbeiten, wenn ich diesen Fall in der Praxis nie sehen werde. Christopher Barber vor 13 Jahren 0
@Christopher Barber - CPUID wurde seit 486-Prozessoren unterstützt, was auch bedeutet, dass jeder 64-Bit-fähige x86-Prozessor die CPUID unterstützt. vor 13 Jahren 0
@PhiS: Ich bin mir ziemlich sicher, dass Christopher über die fehlende Unterstützung für den cmpxchg16b sprach. Was tun, wenn _das fehlt? Bahbar vor 13 Jahren 2
3
Fizz

Die Unterstützung in der CPU reicht möglicherweise nicht aus, da einige Core 2-Benutzer beim Start von Windows 8.1 herausgefunden haben, insbesondere diejenigen mit einem Intel DP35DP-Motherboard. Ich bin mir noch nicht sicher, was in der Hauptplatine den Betrieb von CMPXCHG16B verhindern könnte. Möglicherweise können die Funktionserkennungsbits vom BIOS deaktiviert werden. Um zusammenzufassen, was Yuhong Baos Blog dazu sagt, gab es eine Prozessor-Errata in frühen Core-2-Chips (E0 / R0-Steppings des 45-nm-Core-2), die dazu führte, dass ihre Funktionen über CPUID falsch gemeldet wurden. Dies konnte, soweit ich das beurteilen kann, über ein BIOS / Microcode-Update umgangen werden.

Siehe http://yuhongbao.blogspot.ca/2015/06/why-your-core-2-processor-appear-to-not.html Yuhong Bao vor 7 Jahren 1