O hyperthreading pode afetar a atomicidade da leitura/gravação interna de 32 bits em um processador de 32 bits?

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

Pergunta

Eu li em algum lugar que o hyperthreading pode fazer com que o int de 32 bits (em um processador de 32 bits) leia e grave de forma não atômica, mesmo quando está alinhado aos limites.Alguém pode explicar como o hyperthreading afeta isso?

Foi útil?

Solução

Se isso fosse verdade, seria algum tipo de bug horrível de CPU específico de um modelo ou etapa específica.O fato de as leituras e gravações de 32 bits serem atômicas é fundamental para as propriedades da plataforma x86 e é confiável para Windows, Linux e muitos softwares aplicativos.

A única coisa a que posso pensar que isso pode estar se referindo é a transição de CPUs de núcleo único sem hyper-threading para CPUs de núcleo físico único com hyper-threading.Em uma CPU x86 de núcleo único sem hyper-threading, instruções únicas (como incremento) que realizam operações de leitura-modificação-gravação em variáveis ​​alinhadas de 32 bits são atômicas mesmo sem um prefixo de bloqueio.(Não é garantido que sejam, simplesmente acontecem.) Uma CPU com hyper-threading se comporta muito como uma CPU com dois núcleos físicos, portanto, operações de leitura-modificação-gravação (exceto troca) não são atômicas garantidas sem um prefixo de bloqueio.

É uma distinção irrelevante agora, já que a grande maioria das CPUs que seu software encontrará terá mais de um núcleo, de uma forma ou de outra.Portanto, mesmo operações de leitura-modificação-gravação de instrução única em valores alinhados de 32 bits não serão atômicas, a menos que sejam bloqueadas.(Exchange sendo a exceção, já que está bloqueado mesmo sem o prefixo.)

Outras dicas

Leitura ou gravação alinhada é sempre atômica, mesmo em sistemas multi-CPU.O que não é atômico (e isso é provavelmente o que você ouviu - ou pelo menos o que você deveria ter ouvido) são instruções de gravação de leitura - gravação, como incremento ou adicionar com um destino de memória.Esses não são atômicos mesmo em sistemas HT, mas são atômicos (não por garantia, em vez de por acaso) em sistemas com uma única CPU lógica, mesmo quando não bloqueado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top