Com o avanço contínuo da tecnologia, os usuários têm requisitos cada vez maiores em termos de processadores, especialmente em termos de desempenho e recursos. Desde que a Intel introduziu pela primeira vez a instrução CPUID em 1993, esta misteriosa instrução tornou-se uma ferramenta indispensável para a compreensão dos detalhes do processador. CPUID não apenas ajuda o software a entender o tipo de processador, mas também revela se recursos avançados como MMX e SSE estão implementados.
A instrução CPUID elimina a necessidade dos desenvolvedores escreverem códigos de máquina complexos para explorar as características do processador, o que é de grande importância para o desenvolvimento de sistemas de computadores modernos.
Antes da introdução da instrução CPUID, os programadores tinham que usar alguns métodos obscuros para obter informações do processador. Com o advento do processador 80386, o registro EDX mostrava a revisão no momento do reset, mas essa informação só poderia ser lida após o reset. Portanto, não existe uma maneira padrão para os aplicativos lerem esses valores. Fora da arquitetura x86, os desenvolvedores ainda precisam contar com alguns processos complexos para identificar variações de CPU. Por exemplo, na série Motorola 680x0 que não possui a instrução CPUID, algumas instruções especificadas requerem privilégios mais altos para serem executadas, o que pode ser usado para distinguir diferentes séries de CPU.
O opcode da instrução CPUID é 0F A2. Este comando não requer nenhum parâmetro porque CPUID usa explicitamente o registro EAX para determinar o tipo principal de informação retornada. Ao chamar CPUID, se EAX for primeiro definido como 0, o parâmetro de chamada EAX mais alto suportado pelo processador será armazenado no registro EAX. Para obter informações sobre uma função estendida, CPUID deve ser chamado com o bit mais significativo definido como 1.
Basicamente os nós folha válidos podem ter até 23h, mas as informações de alguns nós folha não são divulgadas em documentos públicos, e estes são marcados como "reservados".
Os resultados retornados pelo CPUID são diversos. A mais familiar é a chamada com EAX=0, que retorna a string de ID do fabricante do processador e os parâmetros básicos de chamada mais altos. Existem várias cadeias de ID de fabricantes de processadores bem conhecidas, incluindo "GenuineIntel" para Intel, "AuthenticAMD" para AMD, etc.
Quando EAX=1, as informações de etapa, modelo e série da CPU serão retornadas no registro EAX, e os sinalizadores de recurso serão armazenados nos registros EDX e ECX, respectivamente. Essa chamada também exibirá muitos sinalizadores de recursos importantes, permitindo que os desenvolvedores entendam claramente quais recursos o processador possui. Por exemplo, alguns processadores podem suportar virtualização, aceleração de hardware AES e outras funções, e seu impacto na computação diária é óbvio.
As informações retornadas do CPUID podem ajudar os desenvolvedores a otimizar o desempenho do software com base em características específicas de hardware, o que é fundamental para a criação de aplicativos eficientes e direcionados.
Uma chamada com EAX=2 retorna informações do descritor sobre cache e funcionalidade TLB. Esses descritores fornecem uma variedade de informações sobre o cache do processador e o TLB, incluindo tamanho da estrutura, tags e correlações correspondentes, o que é particularmente importante para o desenvolvimento de aplicações que envolvem ajuste de desempenho.
Com a popularização da tecnologia de processamento multi-core, a demanda dos usuários por inteligência topológica de processadores multi-core está crescendo a cada dia. As chamadas EAX=4 e EAX=8000'001Dh podem ser usadas para exibir a hierarquia e a topologia do cache do processador, fornecendo informações detalhadas sobre cada núcleo. Essas informações são críticas para multithreading ou aplicativos que exigem computação paralela.
Ao analisar melhor a situação de compartilhamento entre cache e threads de execução, os desenvolvedores podem otimizar o layout do software para reduzir a latência e aumentar a velocidade de acesso.
A instrução CPUID é de fato uma ferramenta importante para desmistificar as características do processador. Ao interpretar as informações retornadas pelo CPUID, os desenvolvedores podem aproveitar ao máximo os recursos do processador para melhorar o desempenho do software. No entanto, os processadores futuros introduzirão novos recursos e o CPUID mudará para se adaptar a esses recursos?