Quelle est la prévalence des anciens processeurs x64 sans l'instruction cmpxchg16b?

8

L'instruction cmpxchg16b pour effectuer des échanges de mémoire atomique sur 128 bits n'est pas prise en charge sur les anciennes versions du processeur x64, mais il semble que cela soit pris en charge par les nouvelles versions du processeur depuis plusieurs années maintenant. Quelle est la probabilité que je rencontre une machine 64 bits avec un ancien processeur qui n'a pas cette instruction?

Christopher Barber
la source
12
Votre client le plus important a certainement l'un de ceux de l'un de ses serveurs de production critiques qui n'est utilisé que pour des tâches importantes exécutées la veille de Noël, mais nulle part ailleurs, et absolument pas dans l'environnement de test ...
7
Je ne pense pas que cette question aurait dû être migrée vers le superutilisateur. Cela garantit simplement que moins de personnes connaissant la réponse verront cette question.
Christopher Barber,

Réponses:

6

Vous regardez les premiers processeurs AMD 64 bits, avant Rev F (c'est-à-dire lorsqu'ils sont passés à la mémoire DDR2). Il y a aussi quelques premiers pas de D Intel Noconas qui ne le supportaient pas, je pense, mais ceux-ci sont plus rares.

Yuhong Bao
la source
4

Je n'ai pas de données concernant la prévalence de certains types de CPU, donc je ne peux pas répondre directement à votre question. Cependant, vous pouvez savoir si le CPU prend CMPXCHG16Ben charge en vérifiant s'il CPUID.01h.ECX.bit13est 1(disponible) ou 0(non disponible).

Notez également que les manuels d'Intel suggèrent que pour que cette instruction soit exécutée de manière atomique, vous devez la combiner avec le LOCKpréfixe.


la source
Oui, je sais comment vérifier le résultat du processeur. Le problème est de savoir quoi faire s'il n'est pas pris en charge. Je préfère ne pas perdre de temps à contourner une instruction manquante si je ne vais jamais voir ce cas dans la pratique.
Christopher Barber
@Christopher Barber - CPUID est pris en charge depuis la fin des 486 processeurs, ce qui implique également que chaque processeur x86 capable de 64 bits prendra en charge CPUID.
2
@PhiS: Je suis presque sûr que Christopher parlait du manque de support pour le cmpxchg16b. Que faire si cela manque
Bahbar
3

La prise en charge du processeur peut ne pas être suffisante en fait, comme certains utilisateurs de Core 2 l'ont découvert lors du lancement de Windows 8.1 , en particulier ceux qui ont une carte mère Intel DP35DP. Je ne suis pas encore sûr de ce que la carte mère pourrait empêcher le CMPXCHG16B de fonctionner. Les bits de détection des fonctionnalités peuvent probablement être désactivés par le BIOS. Pour résumer ce que le blog de Yuhong Bao dit à ce sujet, il y avait un errata de processeur dans les premières puces Core 2 (pas à pas E0 / R0 du 45nm Core 2) qui ont causé une mauvaise déclaration de leurs fonctionnalités via CPUID. Il était possible de contourner cela via la mise à jour du BIOS / microcode, pour autant que je sache.

Pétiller
la source