¿Qué tan frecuentes son los viejos procesadores x64 que carecen de la instrucción cmpxchg16b?

8

La instrucción cmpxchg16b para realizar intercambios de memoria atómica de 128 bits no es compatible con las versiones antiguas del procesador x64, pero parece que esto ha sido compatible con las versiones más nuevas del procesador desde hace varios años. ¿Qué posibilidades hay de que encuentre una máquina de 64 bits con un procesador antiguo que carece de estas instrucciones?

Christopher Barber
fuente
12
Su cliente más importante, sin duda tiene uno de los de uno de sus críticos eso es servidor de producción utilizada sólo para tareas importantes se ejecutan en la víspera de Navidad, pero en ningún otro lugar, y absolutamente no en el entorno de prueba ...
77
No creo que esto deba haberse migrado al superusuario. Simplemente asegura que menos personas que conocen la respuesta verán esta pregunta.
Christopher Barber

Respuestas:

6

Está viendo los primeros procesadores AMD de 64 bits, antes de Rev F (que es cuando se trasladaron a la memoria DDR2). Creo que hay algunos pasos iniciales de Intel Noconas que no lo soportaron, creo, pero estos son más raros.

Yuhong Bao
fuente
4

No tengo datos sobre la prevalencia de ciertos tipos de CPU, por lo que no puedo responder directamente a su pregunta. Sin embargo, puede averiguar si la CPU es compatible CMPXCHG16Bcomprobando si CPUID.01h.ECX.bit13está 1(disponible) o 0(no disponible).

También tenga en cuenta que los manuales de Intel sugieren que para que esta instrucción se realice atómicamente, debe combinarla con el LOCKprefijo.


fuente
Sí, sé cómo verificar el resultado de la CPU. El problema es qué hacer si no es compatible. Preferiría no perder el tiempo trabajando en una instrucción que falta si nunca voy a ver ese caso en la práctica.
Christopher Barber
@Christopher Barber: CPUID ha sido compatible desde los últimos 486 procesadores, lo que también implica que cada procesador x86 con capacidad de 64 bits admitirá CPUID.
2
@PhiS: Estoy bastante seguro de que Christopher estaba hablando de la falta de soporte para el cmpxchg16b. Qué hacer si eso falta
Bahbar
3

El soporte en la CPU puede no ser suficiente, ya que algunos usuarios de Core 2 se enteraron del lanzamiento de Windows 8.1 , particularmente aquellos que tienen una placa base Intel DP35DP. Todavía no estoy seguro de qué en la placa base podría evitar que CMPXCHG16B funcione. Probablemente, los BIOS pueden deshabilitar los bits de detección de funciones. Para resumir lo que dice el blog de Yuhong Bao sobre esto, hubo una errata de procesador en los primeros chips Core 2 (pasos E0 / R0 del Core 2 de 45 nm) que causó que sus características se informaran erróneamente a través de CPUID. Fue posible solucionar esto a través de la actualización del BIOS / microcódigo, por lo que puedo decir.

Efervescencia
fuente