¿Puede el hiperthreading afectar la atomicidad de 32-bits int leer / escribir en un procesador de 32 bits?

StackOverflow https://stackoverflow.com//questions/9715016

Pregunta

He leído en algún lugar donde el hiperthreading puede hacer un INT de 32 bits (en un procesador de 32 bits) leer y escribir no atómico incluso cuando está alineado con límites.¿Alguien puede explicar cómo los efectos de hiperthreading?

¿Fue útil?

Solución

Si eso fuera cierto, sería una especie de horrible error de CPU que sería específico a un modelo en particular o un paso. Que las lecturas y las escrituras de 32 bits son atómicas son fundamentales para las propiedades de la plataforma X86 y se basa en Windows, Linux y Lotes y muchos software de aplicación.

Lo único en lo que puedo pensar que esto podría haberse referirse es la transición de las CPU de un solo núcleo sin la hiper-roscado a las CPU de un solo centro físico con hiper-roscado. En una CPU de un solo núcleo x86 sin hiper-roscado, las instrucciones simples (como incremento) que realizan las operaciones de lectura-escritura en variables alineadas de 32 bits son atómicas incluso sin un prefijo de bloqueo. (No están garantizados para ser, simplemente son). Una CPU con Hyper-Threading se comporta mucho como una CPU con dos núcleos físicos, por lo que las operaciones de lectura-modificación de la escritura (Otros, entonces intercambian) no se garantizan atómicas sin una Prefijo de bloqueo.

Ahora es una distinción irrelevante ya que la gran mayoría de las CPU encontrarán su software tendrá más de un núcleo de una manera u otra. Por lo tanto, incluso las operaciones de modificación de lectura de una sola instrucción en valores alineados de 32 bits no serán atómicos, a menos que esté bloqueado. (El intercambio es la excepción, ya que está bloqueado incluso sin el prefijo).

Otros consejos

Lectura o escritura alineada es siempre atómica, incluso en los sistemas de Multi-CPU.Lo que no es atómico (y esto es probablemente lo que ha escuchado, o al menos lo que debería haber escuchado) son instrucciones de lectura-modificación de la escritura, como el incremento, o agregue con un objetivo de memoria.Esos no son atómicos incluso en sistemas HT, pero son atómicos (no por garantía, sino por casualidad) en sistemas con una única CPU lógica incluso cuando no está bloqueado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top