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?
8
Réponses:
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.
la source
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
CMPXCHG16B
en charge en vérifiant s'ilCPUID.01h.ECX.bit13
est1
(disponible) ou0
(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
LOCK
préfixe.la source
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.la source