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?
8
Respostas:
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.
fonte
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
CMPXCHG16B
verificando seCPUID.01h.ECX.bit13
está1
(disponível) ou0
(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
LOCK
prefixo.fonte
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.fonte