2010-07-26 17 views
29

¿Es cierto que el prefijo de comando "LOCK" de ASM x86 hace que todos los núcleos se congelen mientras se ejecuta la instrucción siguiente a "LOCK"?x86 Pregunta LOCK en CPU multinúcleo

Lo leí en una publicación de blog y no tiene sentido. No puedo encontrar nada que indique si esto es cierto o no.

+0

relacionadas: [? Puede ser num ++ atómica para 'int num'] (https://stackoverflow.com/questions/39393850/can-num-be -atomic-for-int-num) donde mi respuesta explica más acerca de cómo las instrucciones 'lock'ed se ejecutan internamente. –

Respuesta

41

Se trata de bloquear el bus de memoria para esa dirección. The Intel 64 and IA-32 Architectures Software Developer's Manual - Volume 3A: System Programming Guide, Part 1 nos dice:

7.1.4 Efectos de una operación de BLOQUEO en cachés de procesador interno.

Para los procesadores Pentium y Intel486, la señal LOCK # siempre se afirmó en el autobús durante una operación de bloqueo , incluso si el área de la memoria estar encerrado se almacena en caché en el procesador .

Para el P6 y los últimos procesadores familias más, si el área de memoria que se está bloqueado durante una operación de bloqueo se en caché en el procesador que es llevar a cabo la operación de bloqueo como memoria de escritura no simultánea y es completamente contenido en una línea de caché, el procesador no puede hacer valer la señal LOCK # en el bus. En cambio, modificará la ubicación de la memoria internamente y permitirá [su] mecanismo de coherencia de caché para asegurar que la operación se lleve a cabo atómicamente. Esta operación se denomina "bloqueo de caché". El mecanismo de coherencia de caché impide automáticamente que dos o más procesadores que tengan la misma área de memoria modifiquen simultáneamente los datos en esa área. (énfasis agregado)

Aquí nos enteramos de que los chips P6 y más nuevos son lo suficientemente inteligentes como para determinar si realmente tienen que bloquear el bus o simplemente pueden confiar en el almacenamiento en caché inteligente. Creo que esta es una buena optimización.

He hablado de ello más en mi blog "How Do Locks Lock?"

+0

¡Gracias, Jeff! Eso fue de gran ayuda :) – IamIC

+0

Jeff, gracias por llenar los espacios en blanco y proporcionar referencias. Es agradable ver que los procesadores más recientes son algo más inteligentes sobre el bloqueo. –

+0

Gracias, esta es solo la información que espero encontrar cuando busco el prefijo de bloqueo :) – cib

6

No, pero puede obligar a otros procesadores a esperar mientras este accede a la memoria. Si estos estados de espera alguna vez marcan la diferencia depende de la medida en que los procesadores estén ejecutando un caché.

Cuestiones relacionadas