Qual a prevalência dos processadores x64 antigos sem a instrução cmpxchg16b?


8

A instrução cmpxchg16b para realizar trocas atômicas de memória de 128 bits não é suportada em versões antigas do processador x64, mas parece que isso é suportado por versões mais recentes do processador há vários anos. Qual a probabilidade de encontrar uma máquina de 64 bits com um processador antigo que não possui essas instruções?


12
Seu cliente mais importante certamente tem um daqueles em um servidor de produção crítico usado apenas para tarefas importantes executadas na véspera de Natal, mas em nenhum outro lugar, e absolutamente não no ambiente de teste ...

7
Eu não acho que a pergunta deveria ter sido migrada para superusuário. Apenas garante que menos pessoas que sabem a resposta verão essa pergunta.
Christopher Barber

Respostas:


6

Você está olhando para os processadores AMD de 64 bits anteriores, antes do Rev F (que é quando eles foram movidos para a memória DDR2). Também há alguns Intel Noconas D de primeira etapa que não o apoiaram, eu acho, mas estes são mais raros.


4

Não tenho dados sobre a prevalência de certos tipos de CPUs; portanto, não posso responder diretamente à sua pergunta. No entanto, você pode descobrir se a CPU suporta CMPXCHG16Bverificando se CPUID.01h.ECX.bit13está 1(disponível) ou 0(não disponível).

Observe também que os manuais da Intel sugerem que, para que essas instruções sejam executadas atomicamente, você precisa combiná-las com o LOCKprefixo.


Sim, eu sei como verificar o resultado da CPU. O problema é o que fazer se não for suportado. Prefiro não perder tempo trabalhando em torno de uma instrução que falta, se eu nunca vou ver esse caso na prática.
Christopher Barber

@ Christopher Barber - O CPUID é suportado desde os 486 processadores finais, o que também implica que todos os processadores x86 com capacidade para 64 bits suportam CPUID.

2
@ Phi: Tenho certeza de que Christopher estava falando sobre a falta de suporte ao cmpxchg16b. O que fazer se isso estiver faltando
Bahbar 10/10

3

O suporte na CPU pode não ser suficiente, como alguns usuários do Core 2 descobriram no lançamento do Windows 8.1 , principalmente aqueles que possuem uma placa-mãe Intel DP35DP. Ainda não tenho certeza do que na placa-mãe poderia impedir o CMPXCHG16B de funcionar. Provavelmente, os bits de detecção de recursos podem ser desativados pelo BIOS. Para resumir o que o blog de Yuhong Bao diz sobre isso, houve uma errata do processador nos primeiros chips Core 2 (passos E0 / R0 do Core 2 de 45nm) que causaram erros de relatório de seus recursos via CPUID. Foi possível contornar isso através da atualização do BIOS / microcódigo, até onde eu sei.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.