En la arquitectura x86 , la instrucción CPUID (identificada por un CPUIDcódigo de operación ) es una instrucción suplementaria del procesador (su nombre deriva de " CPU Identification") que permite al software descubrir detalles del procesador. Fue introducida por Intel en 1993 con el lanzamiento de los procesadores Pentium y los últimos procesadores 486. [ 1 ]
Un programa puede utilizar esta información CPUIDpara determinar el tipo de procesador y si se han implementado características como MMX / SSE .
Historia
Antes de la disponibilidad general de la CPUIDinstrucción, los programadores escribían código máquina esotérico que explotaba pequeñas diferencias en el comportamiento de la CPU para determinar la marca y el modelo del procesador. [ 2 ] [ 3 ] [ 4 ] [ 5 ] Con la introducción del procesador 80386, EDX al reiniciar indicaba la revisión, pero esto solo se podía leer después del reinicio y no había una forma estándar para que las aplicaciones leyeran el valor.
Fuera de la familia x86, los desarrolladores todavía deben recurrir en su mayoría a procesos esotéricos (que implican la sincronización de instrucciones o la detección de fallos de la CPU) para determinar las variaciones existentes en el diseño de la CPU.
Por ejemplo, en la serie Motorola 68000 —que nunca tuvo CPUIDinstrucciones de ningún tipo— ciertas instrucciones específicas requerían privilegios elevados. Estas instrucciones podían usarse para diferenciar los distintos miembros de la familia de CPU. En el Motorola 68010, la instrucción MOVE from SR se convirtió en privilegiada. Dado que el 68000 ofrecía una instrucción MOVE from SR sin privilegios , las dos CPU diferentes podían distinguirse al activarse una condición de error de la CPU.
Si bien la CPUIDinstrucción es específica de la arquitectura x86, otras arquitecturas (como ARM) suelen proporcionar registros integrados que se pueden leer de maneras predefinidas para obtener el mismo tipo de información que proporciona la CPUIDinstrucción x86.
Llamando a CPUID
El CPUIDcódigo de operación es 0F A2. La compatibilidad del procesador con la instrucción se puede detectar cambiando correctamente el indicador ID (bit 21) en el registro EFLAGS .
En lenguaje ensamblador , la CPUIDinstrucción no toma parámetros, ya que CPUIDutiliza implícitamente el registro EAX para determinar la categoría principal de información devuelta. En la terminología más reciente de Intel, esto se denomina hoja CPUID. CPUIDDebe llamarse con EAX = 0primero, ya que esto almacenará en el registro EAX el parámetro de llamada EAX más alto (hoja) que implementa la CPU.
Para obtener información de funciones extendidas, CPUIDse debe llamar con el bit más significativo de EAX activado. Para determinar el parámetro de llamada de función extendida más alto, llame CPUIDcon EAX = 80000000h.
Las hojas de CPUID mayores que 3 pero menores que 80000000 solo son accesibles cuando los registros específicos del modelo tienen IA32_MISC_ENABLE.BOOT_NT4 [bit 22] = 0 (lo cual es así por defecto). Como su nombre indica, Windows NT 4.0 hasta SP6 no arrancaba correctamente a menos que este bit estuviera activado, [ 6 ] pero las versiones posteriores de Windows no lo necesitan, por lo que se puede asumir que las hojas básicas mayores que 4 son visibles en los sistemas Windows actuales. A partir de abril de 2024Los permisos básicos válidos llegan hasta las 23 horas, pero la información que devuelven algunos permisos no se divulga en la documentación disponible públicamente, es decir, está "reservada".
Algunas de las hojas añadidas más recientemente también tienen subhojas, que se seleccionan a través del registro ECX antes de llamar CPUID.
EAX=0: Parámetro de función más alto e ID del fabricante
Esto devuelve la cadena de identificación del fabricante de la CPU : una cadena ASCII de doce caracteres almacenada en EBX, EDX, ECX (en ese orden). El parámetro de llamada básico más alto (el valor más grande que se puede establecer en EAX antes de la llamada ) se devuelve en EAX. CPUID
Aquí hay una lista de procesadores y la función de mayor nivel implementada.
A continuación se muestran las cadenas de identificación utilizadas por los procesadores reales, listadas en orden de su introducción:
"GenuineIntel"– Intel"UMC UMC UMC "– UMC"AuthenticAMD"– AMD"CyrixInstead"– Cyrix – también licenciada por STMicroelectronics e IBM"NexGenDriven"– NexGen"CentaurHauls"– Centaur – propiedad de IDT , luego de VIA , luego de Zhaoxin."RiseRiseRise"- Elevar"SiS SiS SiS "– SiS (ex-Rise)"GenuineTMx86"– Transmeta – utilizado en la hoja CPUID estándar 0000_0000h, para compatibilidad con Intel"TransmetaCPU"– Transmeta – utilizado en las hojas extendidas CPUID 8000_0000h y 8086_0000h"Geode by NSC"– National Semiconductor – adquirida por AMD"Vortex86 SoC"– DM&P Vortex86 (ex-SiS)"Genuine RDC"– RDC Semiconductor Co. Ltd. [ 7 ] (ex-SiS)"HygonGenuine"– Hygon (linaje AMD Zen)" Shanghai "– Zhaoxin (linaje del centauro Isaías)"GenuineIotel"– Intel – raro – probablemente causado por un error de 1 bit – un informe completo + algunos informes parciales [ 8 ] [ 9 ]
Las siguientes son cadenas de identificación que probablemente sean falsas:
– a veces se menciona, pero nunca se ha observado ningún procesador VIA con esta cadena."VIA VIA VIA "– a veces se menciona, pero nunca se ha observado ningún procesador AMD con esta cadena."AMDisbetter!"– citado con frecuencia [ 10 ] [ 11 ] , pero nunca se ha observado ningún procesador AMD K5 con esta cadena; en particular, incluso el primer procesador K5 con Familia/Modelo/Revisión 500h enviado con"AMD ISBETTER""AuthenticAMD"
Las siguientes son cadenas de identificación utilizadas por los núcleos de CPU de software de código abierto :
"GenuineAO486"– CPU ao486 (antigua) [ 12 ] [ 13 ]"MiSTer AO486"– CPU ao486 (nueva) [ 14 ] [ 13 ]"GenuineIntel"– Núcleo v586 [ 15 ] (esto es idéntico a la cadena de identificación de Intel)
Las siguientes son cadenas de identificación utilizadas por las máquinas virtuales:
- (una variedad de cadenas) – Procesador MCST Elbrus e2k al ejecutar software de traducción binaria dinámica [ 16 ]
"E2K MACHINE "– Las cadenas son inconsistentes – Algunas (pero no todas) codifican el tipo de placa base ."E8C-SWTX "– se desconoce si los pads DBT SW tienen espacios finales o caracteres \0 finales."EL2S4 ""Elbrus-MCST ""MBE1C-PC ""MBE8C-PC v.2""MONOCUB "
"ConnectixCPU"– Connectix Virtual PC (versión 6 y anteriores) [ 17 ] [ 18 ]"Virtual CPU "– Microsoft Virtual PC 7; [ 18 ] Microsoft x86-to-ARM (x86 de 32 bits) [ 19 ]"AuthenticAMD"– Microsoft x86 a ARM (x86 de 64 bits) [ 19 ]"GenuineIntel"– Apple Rosetta 2 [ 20 ]"Insignia 586"– Insignia RealPC [ 21 ] [ 22 ] y SoftWindows 98 [ 23 ]"Compaq FX!32"– Compaq FX!32 (emulador x86 para procesadores DEC Alpha ) [ 24 ]"Neko Project"– Neko Project II ( emulador de PC-98 ) (se usa cuando la CPU a emular está configurada como "Neko Processor II") [ 25 ] [ 26 ]
Por ejemplo, en un GenuineIntelprocesador, los valores devueltos en EBX son 0x756e6547, EDX son 0x49656e69y ECX son 0x6c65746e. El siguiente código de ejemplo muestra la cadena de identificación del proveedor, así como el parámetro de llamada más alto que implementa la CPU.
.intel_syntax sin prefijo.texto.m0: .string "CPUID: %x\n".m1: .string "Número de función básica más grande implementado: %i\n".m2: .string "ID del proveedor: %s\n".globl principalprincipal:empujar r12mov eax , 1sub rsp , 16ID de CPUlea rdi , .m0 [ rip ]mov esi , eaxllamar a printfxor eax , eaxID de CPUlea rdi , .m1 [ rip ]mov esi , eaxmov r12d , edxmov ebp , ecxllamar a printfmov 3 [ rsp ], ebxleer rsi , 3 [ rsp ]lea rdi , .m2 [ rip ]mov 7 [ rsp ], r12dmov 11 [ rsp ], ebpllamar a printfagregar rsp , 16pop r12retirado.section .note.GNU - stack , "" , @ progbitsEn algunos procesadores, es posible modificar la cadena de identificación del fabricante que informa CPUID.(EAX=0) escribiendo una nueva cadena de identificación en registros específicos del modelo (MSR ) particulares mediante la WRMSRinstrucción. Esto se ha utilizado en procesadores que no son de Intel para habilitar funciones y optimizaciones que se han deshabilitado por software para las CPU que no devuelven la GenuineIntelcadena de identificación. [ 27 ] Entre los procesadores que se sabe que poseen dichos MSR se incluyen:
EAX=1: Bits de información y características del procesador
Esto devuelve la revisión , el modelo, el nombre en clave de la microarquitectura y la información de la familia de la CPU en el registro EAX (también llamado firma de una CPU), los indicadores de características en los registros EDX y ECX, y la información adicional de características en el registro EBX. [ 35 ]
- El ID de revisión es un número de revisión del producto asignado debido a correcciones de errores u otros cambios.
- El modelo de procesador real se deriva de los campos Modelo, ID de modelo extendido e ID de familia. Si el campo ID de familia es 6 o 15, el modelo es igual a la suma del campo ID de modelo extendido (desplazado 4 bits a la izquierda) y el campo Modelo. En caso contrario, el modelo es igual al valor del campo Modelo.
- La familia de procesadores se determina a partir de los campos ID de familia e ID de familia extendida. Si el campo ID de familia es igual a 15, la familia corresponde a la suma de los campos ID de familia extendida e ID de familia. En caso contrario, la familia corresponde al valor del campo ID de familia.
- El significado del campo Tipo de procesador se muestra en la tabla a continuación.
A octubre de 2023, se conocen los siguientes identificadores de familia de procesadores x86: [ 37 ]
- ↑ El procesador i386 no admite la
CPUIDinstrucción; sin embargo, sí devuelve el ID de familia3hen el valor de reinicio de EDX. - ↑ Se ha informado que se evitó deliberadamente el usode Family ID para la familia de procesadores Pentium 4 debido a la incompatibilidad con Windows NT 4.0. [ 46 ]
8h
- ↑ En las CPU con más de 128 procesadores lógicos en un solo paquete (por ejemplo, Intel Xeon Phi 7290 [ 51 ] y AMD Threadripper Pro 7995WX [ 52 ] ), el valor en el bit 23:16 se establece en un valor que no es potencia de 2.
- ↑ El ID APIC local también se puede identificar mediante la hoja cpuid 0Bh ( CPUID.0Bh.EDX[x2APIC-ID] ). En las CPU con más de 256 procesadores lógicos en un solo paquete (por ejemplo, Xeon Phi 7290), se debe usar la hoja 0Bh porque el ID APIC no cabe en 8 bits.
La información del procesador y los indicadores de características son específicos del fabricante, pero normalmente, otros fabricantes utilizan los valores de Intel por motivos de compatibilidad.
- ↑ En algunos procesadores antiguos, la ejecución
CPUIDcon un índice de hoja (EAX) mayor que 0 puede dejar EBX y ECX sin modificar, conservando sus valores anteriores. Por este motivo, se recomienda poner a cero EBX y ECX antes de ejecutarCPUIDcon un índice de hoja de 1.Entre los procesadores que presentan este comportamiento se incluyen Cyrix MII [ 54 ] e IDT WinChip 2. [ 55 ]
- ↑ En los procesadores de IDT, Transmeta y Rise (IDs de proveedor
CentaurHauls,GenuineTMx86yRiseRiseRise), laCMPXCHG8Binstrucción siempre es compatible, sin embargo, es posible que el bit de característica para la instrucción no esté activado. Esta es una solución alternativa para un error en Windows NT. [ 56 ] - ↑ En los primeros procesadores AMD K5 (
AuthenticAMDFamilia 5 Modelo 0), el bit 9 de EDX solía indicar compatibilidad con PGE. Esto se trasladó al bit 13 a partir del K5 Modelo 1. [ 57 ] - ↑ Intel AP-485, revisiones 006 [ 58 ] a 008, enumera CPUID.(EAX=1):EDX[bit 10] con el nombre "MTRR" (aunque descrito como "Reservado"/"No cuente con su valor") - este nombre fue eliminado en revisiones posteriores de AP-485, y el bit ha sido listado como reservado sin nombre desde entonces.
- ↑ Solo en los procesadores Pentium Pro (
GenuineIntelFamilia 6 Modelo 1), el bit EDX 11 no es válido: el bit está activado, pero lasSYSENTERinstruccionesSYSEXITno son compatibles con el Pentium Pro. [ 59 ] - ↑ Para los MTRR, la información adicional sobre las características no está disponible a través de CPUID, sino a través del
MTRRCAPMSR de solo lectura (MSR0FEh). Este MSR tiene la siguiente estructura: - ↑ Algunos procesadores Intel 64 muy antiguos tienen el
CMPXCHG16Bbit de característica activado aunque no admitan la instrucción; esto se aplica solo aGenuineIntelFamily0FhModel 3 Stepping 4 (Pentium 4 de 90 nm). [ 62 ] - ↑
FCMOVyFCOMIlas instrucciones solo están disponibles si también está presente la FPU x87 integrada (indicado por el bit 0 de EDX). - ↑ El bit 16 de ECX aparece como "Reservado" en la documentación pública de Intel y AMD, y no está activado en ningún procesador conocido. Sin embargo, se informa que algunas versiones del kernel de Windows Vista comprueban este bit [ 63 ] ; si está activado, Vista lo reconocerá como una característica de "canales del procesador".
- ↑ En las CPU Intel y Transmeta [ 31 ] que admiten PSN (Número de serie del procesador), el PSN se puede deshabilitar configurando el bit 21 de MSR
119h(BBL_CR_CTL) a 1. Al hacerlo, se eliminará la hoja 3 y se hará que CPUID.(EAX=1):EDX[bit 18] devuelva 0. - ↑ En procesadores x86 que no son Itanium, la compatibilidad con el bit No-execute se indica en CPUID.(EAX=8000_0001):EDX[bit 20] en su lugar.
- ↑ El bit 28 de EDX, si está activado, indica que los bits 23:16 de CPUID.(EAX=1):EBX son válidos. Si este bit no está activado, el paquete de CPU contiene solo 1 procesador lógico.
En la documentación antigua, este bit suele aparecer como un indicador de " tecnología Hyper-threading " [ 67 ] ; sin embargo, si bien este indicador es un requisito previo para la compatibilidad con Hyper-Threading, por sí solo no indica compatibilidad con Hyper-Threading y se ha activado en muchas CPU que no cuentan con ningún tipo de tecnología multihilo. [ 68 ]
Los campos reservados deben enmascararse antes de utilizarlos para la identificación del procesador.
EAX=2: Información del descriptor de caché y TLB
Esto devuelve una lista de descriptores que indican las capacidades de caché y TLB en los registros EAX, EBX, ECX y EDX.
En los procesadores que admiten esta hoja, llamar CPUIDcon EAX=2 hará que el byte inferior de EAX se establezca en 01h[ a ] y los 15 bytes restantes de EAX/EBX/ECX/EDX se llenen con 15 descriptores, un byte cada uno. Estos descriptores proporcionan información sobre las cachés, TLB y prefetch del procesador. Normalmente es una caché o TLB por descriptor, pero algunos valores de descriptor también proporcionan otra información; en particular, 00hse usa para un descriptor vacío, FFhindica que la hoja no contiene información de caché válida y que se debe usar la hoja 4h en su lugar, e FEhindica que la hoja no contiene información de TLB válida y que se debe usar la hoja 18h en su lugar. También hay algunos casos, como los descriptores 63hy C3h, donde un solo descriptor proporciona información sobre múltiples TLB. Los descriptores pueden aparecer en cualquier orden.
Para cada uno de los cuatro registros (EAX, EBX, ECX, EDX), si el bit 31 está activado, entonces no se debe considerar que el registro contiene descriptores válidos (por ejemplo, en Itanium en modo IA-32, CPUID(EAX=2) devuelve 80000000hEDX; esto debe interpretarse como que EDX no contiene información válida, no que contiene un descriptor para una caché L2 de 512K).
La tabla que aparece a continuación proporciona, para valores de descriptor conocidos, una descripción resumida de la caché o TLB indicada por dicho valor de descriptor (u otra información, cuando corresponda). Los sufijos utilizados en la tabla son:
- K, M, G : kibibyte, mebibyte, gibibyte (capacidad para cachés, tamaño de página para TLBs)
- E : entradas (para TLB; por ejemplo, 64E = 64 entradas)
- p : tamaño de página (por ejemplo, 4Kp para TLB donde cada entrada describe una página de 4 KiB , 4K/2Mp para TLB donde cada entrada puede describir una página de 4 KiB o una página enorme de 2 MiB)
- L : tamaño de la línea de caché (por ejemplo, 32L = tamaño de línea de caché de 32 bytes)
- S : tamaño del sector de caché (por ejemplo, 2S significa que la caché utiliza sectores de 2 líneas de caché cada uno).
- A : asociatividad (por ejemplo, 6A = asociativo de 6 vías , FA = totalmente asociativo)
- ↑ En la documentación antigua de Intel, el byte inferior del valor devuelto en EAX se describe como la especificación del número de veces que
CPUIDdebe llamarse con EAX=2 para obtener todos los descriptores de caché/TLB. Sin embargo, todos los procesadores conocidos que implementan esta hoja devuelven01heste byte, y la documentación más reciente de Intel (SDM rev 053 [ 72 ] y posteriores) especifica que este byte tiene el valor01h. - 1 2 Para los descriptores
0Dhy0Eh, Intel AP-485 rev 37 [ 73 ] enumera las cachés que describen como que tienen ECC ; esto se eliminó en la revisión 38 y documentación posterior de Intel. - 1 2 3 4 5 6 7 8 9 Los descriptores
10h,15h,1Ah,88h,89h,8Ah,90h,96h,9Bhestán documentados solo para el modo de operación IA-32 de Itanium . [ 74 ] - ↑ La caché descrita por el descriptor
21hse denomina en algunos lugares (por ejemplo, AP-485 rev 36 [ 75 ] pero no rev 37) "MLC" (Mid-Level Cache). - 1 2 3 4 Los valores de descriptor
26h,27h,28hy81hno aparecen en la documentación de Intel y no se utilizan en ninguna CPU lanzada conocida. (81hse ha visto en muestras de ingeniería del Intel Timna cancelado . [ 85 ] ) Sin embargo, se ha informado que son reconocidos por el kernel de Windows NT v5.1 ( Windows XP ) y superior.81htambién es reconocido por v5.0 ( Windows 2000 ). [ 86 ] - 1 2 3 4 5 6 7 Los descriptores
39h-3Ehse73henumeran en la revisión 36 de Intel AP-485, [ 75 ] pero se han eliminado de la documentación posterior de Intel a pesar de que varios de ellos se han utilizado en las CPU de Intel (principalmente en las CPU Celeron basadas en Netburst , por ejemplo39hen "Willamette-128" , [ 76 ]3Bhen "Northwood-128", [ 77 ] y3Chen "Prescott-256" [ 78 ] ). - ↑ El descriptor
3Fh, a fecha de noviembre de 2024, no figura en ninguna documentación conocida de Intel; sin embargo, se utiliza en los procesadores Intel Tolapai , [ 79 ] y aparece en un parche del kernel de Linux proporcionado por Intel. [ 80 ] - 1 2 3 4 La documentación del procesador VIA Cyrix III "Joshua" (
CyrixInsteadFamilia 6 Modelo 5) indica que este procesador utiliza valores de descriptor74hy77hpara sus TLB, y valores42hy82hpara sus cachés, pero no especifica a qué cachés/TLB del procesador corresponde cada uno de estos valores de descriptor. [ 81 ] - ↑ El descriptor
49hindica una caché de nivel 3 enGenuineIntellas CPU Family 0Fh Model 6 (Xeon basado en Pentium 4) y una caché de nivel 2 en otras CPU. - ↑ La documentación CPUID de Intel no especifica la asociatividad de la ITLB indicada por el descriptor
4Fh. Los procesadores que utilizan este descriptor (Intel Atom "Bonnell" [ 82 ] ) se describen en otros lugares como poseedores de una ITLB de 32 entradas totalmente asociativa. [ 83 ] - 1 2 En las CPU Cyrix y Geode (ID de proveedor
CyrixInsteadyGeode by NSC), los descriptores70hy80htienen un significado diferente: [ 84 ]- El descriptor
70hindica una TLB asociativa de 4 vías con instrucciones y datos compartidos de 32 entradas y un tamaño de página de 4K. - El descriptor
80hindica una caché L1 compartida de instrucciones y datos de 16 KiB con asociatividad de conjuntos de 4 vías y un tamaño de línea de caché de 16 bytes.
- El descriptor
- ↑ El descriptor
76haparece listado como una caché L2 de 1 MiB en la revisión 37 de Intel AP-485, [ 73 ] pero como una TLB de instrucciones en la revisión 38 y en toda la documentación posterior de Intel. - 1 2 3 Los descriptores
77h,7Eh,8Dhestán documentadossolo para el modo de operación IA-32 de Itanium 2. [ 87 ] - ↑ Bajo el modo de operación IA-32 de Itanium 2, el tamaño de la caché L3 siempre se informa como 3 MiB independientemente del tamaño real de la caché. [ 88 ]
- ↑ Para el descriptor
B1h, la capacidad de TLB es de 8 elementos cuando se utilizan páginas de 2 MiB, pero se reduce a 4 elementos cuando se utilizan páginas de 4 MiB. - ↑ Para el descriptor
C3h, muchos procesadores Intel que usan este descriptor tienen una TLB L2 que es asociativa por conjuntos de 12 vías, no de 6 vías. Esto se aplica al menos a las CPU Skylake [ 90 ] y Whiskey/Kaby/Coffee/Comet Lake [ 91 ] . - 1 2 La precarga especificada por los descriptores
F0hesF1hel paso recomendado para la precarga de memoria con laPREFETCHNTAinstrucción. [ 93 ]
EAX=3: Número de serie del procesador
Esto devuelve el número de serie del procesador. El número de serie del procesador se introdujo en el Intel Pentium III , pero debido a preocupaciones de privacidad, esta función ya no se implementa en modelos posteriores (el bit de la función PSN siempre se borra). Los procesadores Efficeon y Crusoe de Transmeta también ofrecen esta función. Sin embargo, las CPU de AMD no implementan esta función en ningún modelo.
Para las CPU Intel Pentium III, leaf 3 devuelve los 64 bits inferiores del número de serie del procesador de 96 bits en EDX:ECX; los 32 bits superiores del número de serie se toman de la firma de la CPU devuelta en EAX cuando CPUIDse llama con EAX=1. [ 94 ] .
Para las CPU Transmeta Crusoe y Efficeon, la hoja 3 devuelve un número de serie del procesador de 128 bits en EAX:EBX:ECX:EDX [ 95 ] (Los 32 bits superiores de este número de serie, entregados en EAX, siempre son 0 en los procesadores Crusoe [ 96 ] pero se sabe que son distintos de cero en al menos algunos procesadores Efficeon. [ 97 ] )
Tenga en cuenta que la función del número de serie del procesador debe estar habilitada en la configuración del BIOS para que funcione correctamente.
EAX=4 y EAX=8000'001Dh: Jerarquía y topología de la caché
Estas dos hojas se utilizan para proporcionar información sobre los niveles de jerarquía de caché disponibles para el núcleo del procesador en el que CPUIDse ejecuta la instrucción. Leaf 4se utiliza en procesadores Intel y leaf 8000'001Dhse utiliza en procesadores AMD; ambas devuelven datos en EAX, EBX, ECX y EDX, utilizando el mismo formato de datos excepto que leaf 4devuelve algunos campos adicionales que se consideran "reservados" para leaf 8000'001Dh. Ambas proporcionan información de caché de CPU en una serie de subhojas seleccionadas por ECX; para obtener información sobre todos los niveles de caché, es necesario invocar CPUIDrepetidamente, con EAX= 4o 8000'001Dhy ECX establecido en valores crecientes a partir de 0 (0,1,2,...) hasta que se encuentre una subhoja que no describa ninguna caché (EAX[4:0]=0). Las subhojas que sí devuelven información de caché pueden aparecer en cualquier orden, pero todas aparecerán antes de la primera subhoja que no describa ninguna caché.
En la tabla siguiente, los campos que están definidos para leaf 4pero no para leaf 8000'001Dhestán resaltados con color de celda amarillo y un elemento (#4) .
- ↑ Intel AP-485, revisiones 31 [ 98 ] y 32, enumeran los bits 9:0 de EDX como un campo "Prefetch Stride"; esto se eliminó en la revisión 33 y en toda la documentación posterior de Intel, y no se conoce ningún procesador que utilice EDX de esta manera.
- ↑ El bit 4 de EDX no aparece en ninguna documentación pública conocida de Intel, pero se ha observado que está configurado para la caché de nivel 2 de los procesadores Intel Xeon Phi x200 ("Knights Landing"). [ 99 ]
- 1 2 Para la hoja 4 de CPUID, los bits 11:10 de EAX están documentadossolo para el procesador
GenuineIntelFamilia ). [ 47 ] Para otros procesadores, se deben usar los bits 1:0 de EDX en su lugar.0Bh
Para cualquier caché que sea válida y no totalmente asociativa, el valor devuelto en ECX es el número de conjuntos en la caché menos 1. (Para cachés totalmente asociativas, ECX debe tratarse como si devolviera el valor 0). Para cualquier caché dada descrita por una subhoja de CPUIDhoja 4o 8000'001Dh, el tamaño total de la caché en bytes se puede calcular como:
CacheSize = (EBX[11:0]+1) * (EBX[21:12]+1) * (EBX[31:22]+1) * (ECX+1)
Por ejemplo, en las CPU Intel Crystalwell , ejecutar CPUID con EAX=4 y ECX=4 hará que el procesador devuelva la siguiente información de tamaño para su caché de nivel 4 en EBX y ECX: EBX=03C0F03Fy ECX=00001FFF- esto debe tomarse para decir que esta caché tiene un tamaño de línea de caché de 64 bytes (EBX[11:0]+1), tiene 16 líneas de caché por etiqueta (EBX[21:12]+1), es asociativa por conjuntos de 16 vías (EBX[31:22]+1) con 8192 conjuntos (ECX+1), para un tamaño total de 64*16*16*8192=134217728 bytes, o 128 mebibytes.
EAX=4 y EAX=Bh: Topología de hilos/núcleos y caché de Intel
Estas dos hojas se utilizan para la enumeración de la topología del procesador (hilo, núcleo, paquete) y la jerarquía de caché en los procesadores multinúcleo (y con hyperthreading) de Intel. [ 100 ] A partir de 2013AMD no utiliza estas hojas, sino que tiene formas alternativas de realizar la enumeración de núcleos. [ 101 ]
A diferencia de la mayoría de las demás hojas CPUID, la hoja Bh devolverá valores diferentes en EDX dependiendo del procesador lógico en el que se ejecute la instrucción CPUID; el valor devuelto en EDX es en realidad el ID x2APIC del procesador lógico. Sin embargo, el espacio de ID x2APIC no está mapeado de forma continua a los procesadores lógicos; puede haber huecos en el mapeo, lo que significa que algunos ID x2APIC intermedios no necesariamente corresponden a ningún procesador lógico. En los demás registros se proporciona información adicional para mapear los ID x2APIC a los núcleos. Aunque la hoja Bh tiene subhojas (seleccionadas por ECX como se describe más adelante), el valor devuelto en EDX solo se ve afectado por el procesador lógico en el que se ejecuta la instrucción, pero no por la subhoja.
La topología del procesador o procesadores expuesta por la hoja Bh es jerárquica, pero con la peculiaridad de que el orden de los niveles (lógicos) en esta jerarquía no necesariamente se corresponde con el orden en la jerarquía física ( SMT /núcleo/paquete). Sin embargo, cada nivel lógico puede consultarse como una subhoja ECX (de la hoja Bh) para determinar su correspondencia con un "tipo de nivel", que puede ser SMT, núcleo o "inválido". El espacio de identificadores de nivel comienza en 0 y es continuo, lo que significa que si un identificador de nivel es inválido, todos los identificadores de niveles superiores también lo serán. El tipo de nivel se devuelve en los bits 15:08 de ECX, mientras que el número de procesadores lógicos en el nivel consultado se devuelve en EBX. Finalmente, la conexión entre estos niveles y los identificadores x2APIC se devuelve en EAX[4:0] como el número de bits que el identificador x2APIC debe desplazarse para obtener un identificador único en el siguiente nivel.
Por ejemplo, un procesador Westmere de doble núcleo con capacidad de hyperthreading (es decir, dos núcleos y cuatro hilos en total) podría tener identificadores x2APIC 0, 1, 4 y 5 para sus cuatro procesadores lógicos. La hoja Bh (=EAX), subhoja 0 (=ECX) de CPUID podría, por ejemplo, devolver 100h en ECX, lo que significa que el nivel 0 describe la capa SMT (hyperthreading), y devolver 2 en EBX porque hay dos procesadores lógicos (unidades SMT) por núcleo físico. El valor devuelto en EAX para esta subhoja 0 debería ser 1 en este caso, porque desplazar los identificadores x2APIC mencionados anteriormente un bit a la derecha da un número de núcleo único (en el siguiente nivel de la jerarquía de identificadores de nivel) y borra el bit del identificador SMT dentro de cada núcleo. Una forma más sencilla de interpretar esta información es que el último bit (bit número 0) del identificador x2APIC identifica la unidad SMT/hyperthreading dentro de cada núcleo en nuestro ejemplo. Avanzar a la subhoja 1 (haciendo otra llamada a CPUID con EAX=Bh y ECX=1) podría, por ejemplo, devolver 201h en ECX, lo que significa que este es un nivel de tipo de núcleo, y 4 en EBX porque hay 4 procesadores lógicos en el paquete; EAX devuelto podría ser cualquier valor mayor que 3, porque sucede que el bit número 2 se usa para identificar el núcleo en el id x2APIC. Tenga en cuenta que el bit número 1 del id x2APIC no se usa en este ejemplo. Sin embargo, EAX devuelto en este nivel bien podría ser 4 (y sucede que lo es en un Clarkdale Core i3 5x0) porque eso también da un id único en el nivel del paquete (=0 obviamente) cuando desplaza el id x2APIC por 4 bits. Finalmente, puede que se pregunte qué nos puede decir la hoja EAX=4 que no hayamos descubierto ya. En EAX[31:26] devuelve los bits de máscara APIC reservados para un paquete; En nuestro ejemplo, sería 111b porque los bits del 0 al 2 se utilizan para identificar procesadores lógicos dentro de este paquete, pero el bit 1 también está reservado, aunque no forma parte del esquema de identificación de procesadores lógicos. En otras palabras, los identificadores APIC del 0 al 7 están reservados para el paquete, aunque la mitad de estos valores no se corresponden con un procesador lógico.
La jerarquía de caché del procesador se explora observando las subhojas de la hoja 4. Los identificadores APIC también se utilizan en esta jerarquía para transmitir información sobre cómo las unidades SMT y los núcleos comparten los diferentes niveles de caché. Para continuar con nuestro ejemplo, la caché L2, que es compartida por las unidades SMT del mismo núcleo pero no entre núcleos físicos en el Westmere, se indica mediante el valor 1 de EAX[26:14], mientras que la información de que la caché L3 es compartida por todo el paquete se indica estableciendo esos bits en (al menos) 111b. Los detalles de la caché, incluyendo el tipo, el tamaño y la asociatividad de la caché, se comunican a través de los demás registros en la hoja 4.
Tenga en cuenta que las versiones anteriores de la nota de aplicación 485 de Intel contienen información engañosa, en particular con respecto a la identificación y el conteo de núcleos en un procesador multinúcleo; [ 102 ] los errores derivados de la mala interpretación de esta información incluso se han incorporado al código de ejemplo de Microsoft para el uso de CPUID, incluso para la edición 2013 de Visual Studio, [ 103 ] pero el código de ejemplo de Intel para identificar la topología del procesador [ 100 ] tiene la interpretación correcta, y el Manual del desarrollador de software de Intel actual tiene un lenguaje más claro. El código de producción multiplataforma (de código abierto) [ 104 ] de Wildfire Games también implementa la interpretación correcta de la documentación de Intel.
En una presentación de Intel de 2010 se muestran ejemplos de detección de topología que involucran procesadores Intel más antiguos (anteriores a 2010) que carecen de x2APIC (por lo tanto, no implementan la hoja EAX=Bh). [ 105 ] Tenga en cuenta que el uso de ese método de detección antiguo en procesadores Intel de 2010 y posteriores puede sobreestimar el número de núcleos y procesadores lógicos porque el método de detección antiguo supone que no hay huecos en el espacio de ID de APIC, y esta suposición es violada por algunos procesadores más nuevos (a partir de la serie Core i3 5x0), pero estos procesadores más nuevos también vienen con un x2APIC, por lo que su topología se puede determinar correctamente utilizando el método de hoja EAX=Bh.
EAX=5: Características de MONITOR/MWAIT
Esto devuelve información sobre las funciones relacionadas con las MONITORinstrucciones MWAITen los registros EAX, EBX, ECX y EDX.
- ↑ Los estados C0 a C7 son estados C específicos del procesador, que no necesariamente se corresponden 1:1 con los estados C de ACPI .
EAX=6: Gestión térmica y energética
Esto devuelve los bits de características en el registro EAX e información adicional en los registros EBX, ECX y EDX.
- ↑ Solo en los procesadores de la familia Intel Pentium 4 (
GenuineIntelfamilia 0Fh), el bit 2 de EAX se utiliza para indicar OPP (Protección del punto operativo) [ 107 ] en lugar de ARAT. - ↑ Para habilitar el modo de acceso rápido (no serializador) para el
IA32_HWP_REQUESTMSR en las CPU que lo admiten, es necesario establecer el bit 0 delFAST_UNCORE_MSRS_CTL(657h) MSR. - ↑ El bit CPUID.(EAX=6):EAX[24] aparece en las revisiones 078 a 087 del Intel SDM, pero se eliminó a partir de la revisión 088. No está activado en ningún procesador conocido.
EAX=7, ECX=0: Características extendidas
Esto devuelve indicadores de características extendidas en EBX, ECX y EDX. Devuelve el valor ECX máximo para EAX=7 en EAX.
- 1 2 3 A partir de abril de 2024, los bits FZM, MPRR y SGX_TEM solo aparecen enla documentación de Intel TDX [ 112 ] y no están configurados en ningún procesador conocido.
EAX=7, ECX=1: Características extendidas
Esto devuelve indicadores de características extendidas en los cuatro registros.
- 1 2 3 4 5 6 7 8 A partir de abril de 2026, los bits "mpsadbw_512", "avx512-rao-fp", "avx-rao-fp", "avx512-vnni-fp16", "avx512-vnni-int8", "avx512-ne-convert", "avx512-vnni-int16" y "avx512-bf16-ne" aparecen listados únicamente en un conjunto de tablas ABI del módulo Intel TDX de abril de 2026 [ 125 ] y no están configurados en ningún procesador conocido.
- ↑ A partir de abril de 2024, el bit DEDUP aparece solo enla documentación de Intel TDX [ 112 ] y no está configurado en ningún procesador conocido.
- ↑ En los procesadores AMD, la compatibilidad con las instrucciones de precarga de caché de instrucciones no se indica mediante
CPUID.(EAX=7,ECX=1):EDX[14]sino medianteCPUID.(EAX=8000_0021h):EAX[20]. - ↑ La compatibilidad con la
MWAITinstrucción puede indicarse mediante CPUID.(EAX=1).ECX[3] o CPUID.(EAX=7,ECX=1).EDX[23]. (Se puede configurar uno o ambos). El primeroMONITORtambién indica compatibilidad con la instrucción, mientras que el segundo no indica si laMONITORinstrucción está presente o no.MWAITenMONITORsistemas que admiten la función "Monitorless MWAIT" (que a su vez se indica mediante CPUID.(EAX=5).ECX[3] ).
EAX=7, ECX=2: Características extendidas
Esto devuelve indicadores de características extendidas en EDX.
EAX, EBX y ECX están reservados.
EAX=0Dh: Características y componentes de estado de XSAVE
Esta hoja se utiliza para enumerar las características y los componentes de estado de XSAVE.
La extensión del conjunto de instrucciones XSAVE está diseñada para guardar/restaurar el estado extendido de la CPU (normalmente para el cambio de contexto ) de forma que pueda ampliarse para cubrir nuevas extensiones del conjunto de instrucciones sin que el código de cambio de contexto del sistema operativo necesite comprender las especificidades de las nuevas extensiones. Esto se logra definiendo una serie de componentes de estado , cada uno con un tamaño y un desplazamiento dentro de un área de guardado determinada, y cada uno correspondiente a un subconjunto del estado necesario para una extensión de CPU u otra. La EAX=0Dhhoja CPUID se utiliza para proporcionar información sobre qué componentes de estado admite la CPU y cuáles son sus tamaños/desplazamientos, de modo que el sistema operativo pueda reservar la cantidad adecuada de espacio y establecer los bits de habilitación asociados.
Los componentes de estado se pueden subdividir en dos grupos: estado de usuario (elementos de estado visibles para la aplicación, por ejemplo, registros vectoriales AVX-512 ) y estado de supervisor (elementos de estado que afectan a la aplicación pero no son directamente visibles para el usuario, por ejemplo, configuración de interrupciones en modo de usuario). Los elementos de estado de usuario se habilitan configurando sus bits asociados en el XCR0registro de control, mientras que los elementos de estado de supervisor se habilitan configurando sus bits asociados en el MSR IA32_XSS( 0DA0h). Los elementos de estado indicados se convierten entonces en los componentes de estado que se pueden guardar y restaurar con la familia de instrucciones XSAVE/ .XRSTOR
El mecanismo XSAVE puede manejar hasta 63 componentes de estado de esta manera. Los componentes de estado 0 y 1 ( x87 y SSE , respectivamente) tienen desplazamientos y tamaños fijos; para los componentes de estado del 2 al 62, sus tamaños, desplazamientos y algunas banderas adicionales se pueden consultar ejecutando CPUIDy EAX=0Dhestableciendo ECXal índice del componente de estado. Esto devolverá los siguientes elementos en EAX, EBX y ECX (con EDX reservado):
Intentar consultar un componente de estado no compatible de esta manera da como resultado que EAX, EBX, ECX y EDX se establezcan en 0.
Las subhojas 0 y 1 de CPUIDla hoja 0Dhse utilizan para proporcionar información sobre las características:
A partir de julio de 2023, los componentes de estado XSAVE que han sido definidos arquitectónicamente son:
EAX=12h: Capacidades de SGX
Esta hoja proporciona información sobre las capacidades compatibles de la función Intel Software Guard Extensions (SGX). La hoja contiene varias subhojas, que se seleccionan con ECX.
La subhoja 0 proporciona información sobre las funciones de hoja SGX compatibles en EAX y los tamaños máximos de enclave SGX compatibles en EDX; ECX está reservado. EBX proporciona un mapa de bits de bits que se pueden configurar en el campo MISCSELECT en la SECS (SGX Enclave Control Structure); este campo se utiliza para controlar la información que se escribe en la región MISC de la SSA (SGX Save State Area) cuando se produce una AEX (SGX Asynchronous Enclave Exit).
- 1 2 Los bits de extensiones de sobreasignación SGX (CPUID.(EAX=12h,ECX=0):EAX[bits 5 y 6]) aparecen en las revisiones 065 a 087 del Intel SDM, pero se eliminaron a partir de la revisión 088. Se sabe que estos bits se activaron en al menos algunosprocesadores IceLake-U . [ 131 ]
La subhoja 1 proporciona un mapa de bits que indica qué bits se pueden configurar en el campo ATRIBUTOS de 128 bits de SECS en EDX:ECX:EBX:EAX (esto se aplica a la copia de SECS utilizada como entrada para la ENCLS[ECREATE]función de la hoja). Los 64 bits superiores (dados en EDX:ECX) son un mapa de bits que indica qué bits se pueden configurar en la XFRM (máscara de solicitud de función X); esta máscara es una máscara de bits que indica qué componentes de estado de la CPU (ver hoja 0Dh) se guardarán en el SSA en caso de una AEX; tiene la misma disposición que el XCR0registro de control. Los demás bits se dan en EAX y EBX, como sigue:
- ↑ Para la copia de SECS que existe dentro de un exclave, el bit 0 (INIT) de SECS.ATTRIBUTES se utiliza para indicar que el enclave se ha inicializado con
ENCLS[EINIT]. Este bit debe ser 0 en la copia de SECS que se proporciona como entrada aENCLS[CREATE].
Las subhojas 2 y superiores se utilizan para proporcionar información sobre qué regiones de memoria física están disponibles para su uso como secciones EPC (Enclave Page Cache) bajo SGX.
EAX=14h: Seguimiento del procesador
Esta hoja proporciona información sobre las características de Intel Processor Trace (también conocido como Real Time Instruction Trace).
Para la subhoja 0, el valor devuelto en EAX es el índice de la subhoja más alta admitida para CPUID con EAX=14h. EBX y ECX proporcionan indicadores de características; EDX está reservado.
EAX=15h y EAX=16h: Frecuencias de reloj de la CPU, TSC, bus y cristal del núcleo.
Estas dos hojas proporcionan información sobre las distintas frecuencias de la CPU en EAX, EBX y ECX (EDX está reservado en ambas hojas).
Si los valores devueltos en EBX y ECX de la hoja 15h son ambos distintos de cero, entonces la frecuencia del TSC ( Time Stamp Counter ) en Hz viene dada por TSCFreq = ECX*(EBX/EAX).
En algunos procesadores (por ejemplo, Intel Skylake ), CPUID_15h_ECX es cero, pero CPUID_16h_EAX está presente y no es cero. En todos los procesadores conocidos donde esto ocurre, [ 134 ] la frecuencia TSC es igual a la frecuencia base del procesador, y la frecuencia del reloj del cristal del núcleo en Hz se puede calcular como CoreCrystalFreq = (CPUID_16h_EAX * 10000000) * (CPUID_15h_EAX/CPUID_15h_EBX).
En los procesadores que enumeran la relación TSC/Core Crystal Clock en la hoja 15h de CPUID, la frecuencia del temporizador APIC será la frecuencia del Core Crystal Clock dividida por el divisor especificado por el Divide Configuration Register de APIC. [ 135 ]
EAX=17h: Enumeración de atributos del proveedor de SoC
Esta hoja está presente en sistemas donde un núcleo IP de CPU x86 se implementa en un SoC ( Sistema en chip ) de otro proveedor; mientras que las demás hojas CPUIDproporcionan información sobre el núcleo de CPU x86, esta hoja proporciona información sobre el SoC. Esta hoja toma un índice de subhojas en ECX.
La subhoja 0 devuelve un índice máximo de subhoja en EAX (al menos 3) e información de identificación de SoC en EBX/ECX/EDX:
Las subhojas 1 a 3 devuelven una cadena de 48 bytes con la marca del proveedor del SoC en formato UTF-8 . La subhoja 1 devuelve los primeros 16 bytes en EAX, EBX, ECX, EDX (en ese orden); la subhoja 2 devuelve los siguientes 16 bytes y la subhoja 3 devuelve los últimos 16 bytes. Se permite, pero no es obligatorio, que la cadena termine en nulo .
EAX=18h: Jerarquía y topología de TLB
Esta hoja proporciona información sobre las TLB ( búferes de traducción anticipada ) disponibles para el núcleo del procesador en el que CPUIDse ejecuta la instrucción. Esta hoja contiene varias subhojas, seleccionadas con ECX.
Cuando se invoca con ECX=0, devolverá el índice de la subhoja admitida más alta en EAX y todos los bits a cero en los 5 bits inferiores de EDX; los bits restantes de EDX, así como EBX y ECX, están reservados.
Cuando se invoca con ECX≠0, devuelve información sobre una TLB, y ECX (que varía de 1 al sub-hoja más alto admitido) selecciona la TLB sobre la que se devuelve la información. Las TLB de un procesador determinado pueden aparecer en cualquier orden. La información devuelta para una TLB determinada incluye el número de conjuntos en ECX, así como información adicional en EBX y EDX (EAX está reservado):
- ↑ Si EDX[4:0] se devuelve como 0, entonces la subhoja se considera inválida: no describe una TLB y ninguno de los otros datos devueltos en EBX, ECX o los bits restantes de EDX son válidos.
Es posible que aparezca una subhoja válida después de una subhoja no válida.
EAX=19h: Características de Intel Key Locker
Esta hoja proporciona información sobre las características de Intel Key Locker en EAX, EBX y ECX. EDX está reservado.
- ↑ A partir de abril de 2024, el bit "Restricción de proceso" solo aparece enla documentación de Intel TDX [ 112 ] y no está configurado en ningún procesador conocido.
EAX=1Dh: Información del mosaico Intel AMX
Cuando ECX=0, se enumera en EAX la subhoja "palette" admitida de mayor nivel. Cuando , se devuelve ECX≥1información sobre la paleta n .
EAX=1Eh: TMULInformación del multiplicador de mosaicos Intel AMX ( )
Esta hoja devuelve información sobre la unidad AMXTMUL (multiplicador de mosaico). La hoja proporciona varias subhojas, que se seleccionan con ECX.
La subhoja 0 devuelve la subhoja máxima admitida en EAX e información básica de TMUL en EBX; la subhoja 1 devuelve información adicional sobre las características en EAX.
EAX=21h: Reservado para enumeración TDX
Cuando Intel TDX ( Trust Domain Extensions ) está activo, los intentos de ejecutar la CPUIDinstrucción por parte de un invitado TD (Trust Domain) serán interceptados por el módulo TDX. Este módulo, cuando CPUIDse invoca con EAX=21hy ECX=0(hoja 21h, subhoja 0), devolverá el índice de la subhoja admitida más alta para la hoja 21hen EAXy una cadena de ID de proveedor del módulo TDX como una cadena ASCII de 12 bytes en EBX,EDX,ECX (en ese orden). La implementación del módulo de Intel devuelve la cadena de ID de proveedor (con cuatro espacios finales) [ 140 ] - para este módulo, la información de características adicionales no está disponible a través de y debe obtenerse a través de la instrucción específica de TDX."IntelTDX "CPUIDTDCALL
Esta hoja está reservada en el hardware y devolverá (en procesadores cuya hoja básica más alta sea 21ho superior) 0 en EAX/EBX/ECX/EDX cuando se ejecute directamente en la CPU.
EAX=24h, ECX=0: ISA vectorial convergente AVX10
Esto devuelve el número máximo de subhojas admitidas en EAX y la información de características AVX10 en EBX. [ 123 ] (ECX y EDX están reservados).
- ↑ Estos tres bits fueron diseñados originalmente para indicar el "ancho de vector admitido", con el bit 16 indicando soporte de vector de 128 bits, el bit 17 para 256 bits y el bit 18 para 512 bits. Se decía que las CPU de máximo 128 bits tenían soporte "AVX10/128" , las de máximo 256 bits tenían soporte "AVX10/256" y las de máximo 512 bits tenían soporte "AVX10/512" ; el número después de la barra indicaba el ancho de vector máximo admitido. Poco después del anuncio de AVX10.1, Intel abandonó los planes para AVX10/128 , [ 141 ] probablemente después de la presión de los desarrolladores , dejando solo anchos de vector máximos de 256 bits y 512 bits admitidos. Con AVX10.2, Intel eliminó por completo la distinción de ancho de vector, exigiendo en su lugar soporte de vector de 512 bits. Dado que los únicos procesadores AVX10.1 comercializados se basaban en Granite Rapids , un diseño exclusivamente de núcleo P (y posteriormente contó con AVX10/512 ), nunca se comercializaron procesadores AVX10/256 . En otras palabras, los únicos procesadores comercializados con AVX10 admitían 128, 256 y 512 bits, asignando a los tres bits el valor 111b. Estos bits ahora están documentados como reservados, pero se leen como 111b.
EAX=24h, ECX=1: Características discretas de AVX10
La subhoja 1 está reservada para las características de AVX10 que no están vinculadas a una versión.
- ↑ Las instrucciones AVX10.2 VNNI están presentes si la versión de AVX10 es 2 o superior (ver CPUID.(EAX=24h).EBX[7:0]) o si el bit AVX10_VNNI_INT está activado.
EAX=2000'0000h: Función Phi de Xeon más alta implementada
La función de mayor nivel se devuelve en EAX. Esta hoja solo está presente en los procesadores Xeon Phi . [ 145 ]
EAX=2000'0001h: Bits de características de Xeon Phi
Esta función devuelve indicadores de características.
EAX=4000'0000h-4FFFF'FFFh: Reservado para hipervisores
Cuando la CPUIDinstrucción se ejecuta bajo la virtualización Intel VT-x o AMD-v , será interceptada por el hipervisor, lo que le permite devolver CPUIDindicadores de características que difieren de los del hardware subyacente. Las CPUIDhojas no están implementadas en el hardware y están reservadas para que los hipervisores proporcionen información de identificación y características específicas del hipervisor a través de este mecanismo de intercepción.40000000h4FFFFFFFh
Para leaf 40000000h, se espera que el hipervisor devuelva el índice de la hoja CPUID de hipervisor más alta admitida en EAX, y una cadena de ID de hipervisor de 12 caracteres en EBX, ECX, EDX (en ese orden). Para leaf 40000001h, el hipervisor puede devolver una firma de identificación de interfaz en EAX - por ejemplo, los hipervisores que desean anunciar que son compatibles con Hyper-V pueden devolver 0x31237648- "Hv#1"en EAX. [ 146 ] [ 147 ] Los formatos de leaf 40000001hy hasta la hoja más alta admitida son, por lo demás, específicos del hipervisor. Los hipervisores que implementan estas hojas normalmente también establecerán el bit 31 de ECX para la hoja CPUID 1 para indicar su presencia.
Los hipervisores que exponen más de una interfaz de hipervisor pueden proporcionar conjuntos adicionales de hojas CPUID para las interfaces adicionales, con un espaciado de 100hhojas por interfaz. [ 148 ] Ejemplos de hipervisores que hacen esto incluyen:
- Cuando QEMU está configurado para proporcionar interfaces tanto de Hyper-V como de KVM , proporcionará información de Hyper-V a partir de la hoja CPUID
40000000he información de KVM a partir de la hoja40000100h. [ 149 ] [ 150 ] - Cuando Xen está configurado para proporcionar emulación de Hyper-V, proporcionará información de Hyper-V a partir de la hoja CPUID
40000000he información de Xen a partir de la hoja40000100h. [ 151 ]
Algunos hipervisores que se sabe que devuelven una cadena de identificación de hipervisor en leaf 40000000hincluyen:
EAX=8000'0000h: Función extendida más alta implementada
En EAX se devuelve el parámetro de llamada de mayor nivel.
EBX/ECX/EDX devuelven la cadena de identificación del fabricante (igual que EAX=0) en las CPU de AMD pero no en las de Intel.
EAX=8000'0001h: Bits de información y características extendidas del procesador
Esto devuelve indicadores de características extendidas en EDX y ECX. En los procesadores AMD, también devuelve una firma de CPU en EAX y un identificador de marca en EBX.
La firma devuelta en EAX es, para la mayoría de los procesadores AMD, la misma que la devuelta en EAX para la EAX=1hoja. (Las excepciones a esto son las familias de procesadores AMD K6 y AMD K7 , donde la parte "Familia" de la firma difiere entre la hoja 1y la hoja 80000001: la hoja 1devuelve 5para K6 y 6para K7, mientras que la hoja 80000001devuelve 6para K6 y 7para K7). [ 172 ]
Muchos de los bits EDX(del 0 al 9, del 12 al 17, 23 y 24) son duplicados de EDXla EAX=1hoja; estos bits están resaltados en amarillo claro. (Estos bits duplicados están presentes en las CPU AMD, pero no en las Intel).
Las banderas de características de AMD en EDX y ECX son las siguientes: [ 173 ] [ 174 ]
- ↑ El uso del bit EDX 10 para indicar la compatibilidad con
SYSCALL/SYSRETsolo es válido enlas CPU del modelo 7AuthenticAMDde la familia 5 ( AMD K6 , 250 nm "Little Foot"); para todos los demás procesadores, se debe usar el bit EDX 11. Estas instrucciones se introdujeron por primera vez en el modelo 7 [ 175 ] ; el bit CPUID para indicar su compatibilidad se movió [ 176 ] al bit EDX 11 a partir del modelo 8 ( AMD K6-2 ).La versión
SYSCALLpresente en el Modelo 7 (indicada por el bit 10 del EDX) no es totalmente compatible con la versiónSYSCALLpresente en el Modelo 8 y las CPU posteriores (indicada por el bit 11 del EDX) en procesadores posteriores (la versión del Modelo 7 no lo permiteIRETdespués deSYSCALLmientras que las versiones posteriores sí). [ 177 ] - ↑ En las CPU de Intel, el bit CPUID para
SYSCALL/SYSRETsolo se establece si laCPUIDinstrucción se ejecuta en modo de 64 bits. [ 178 ] - ↑ La propuesta inicial de AMD para la extensión del conjunto de instrucciones SSE5 enumeraba el bit 11 de ECX como el bit de características para SSE5. [ 179 ] Cuando AMD abandonó su propuesta de SSE5 a favor de XOP, el bit 11 de ECX se reutilizó como el bit de características para XOP.
- ↑ El bit 14 de ECX (como TBM0) aparece en sandpile.org [ 180 ] y es reconocido por HWiNFO 8.24, pero no está configurado en ningún procesador conocido ni aparece en ninguna documentación pública conocida de AMD. Las codificaciones de instrucciones TBM0 también aparecen en sandpile.org [ 181 ] .
- 1 2 En algunos procesadores − Cyrix MediaGXm , [ 183 ] varios Geodes (NatSemi Geode GXm, GXLV, GX1; AMD Geode GX1 [ 184 ] ) y Transmeta Crusoe [ 185 ] (
CyrixInstead/Geode by NSC/GenuineTMx86, todos de la familia 5 Modelo 4) — los bits EDX 16 y 24 tienen un significado diferente:- Bit 16: Se admite el movimiento condicional de punto flotante (
FCMOV) - Bit 24: Admite instrucciones EMMI ( MMX extendidas ) de Cyrix. (Las instrucciones EMMI también están presentes en los
CyrixInsteadprocesadores de la familia 6, como el 6x86MX y el MII, aunque no activan este bit).
- Bit 16: Se admite el movimiento condicional de punto flotante (
- ↑ El bit 18 de EDX está activado en algunos modelos AMD Athlon "Thunderbird" [ 186 ] y Duron "Spitfire"/"Morgan", pero no aparece en ninguna documentación pública de AMD. Sandpile.org describe el bit como un bit de característica ECC. [ 180 ] [ 187 ]
- ↑ El bit 18 de ECX se listó como CVT16 en la revisión 3.03 de AMD APM vol6, [ 188 ] pero se eliminó de la revisión 3.04 y posteriores. No está configurado en ninguna CPU conocida. Laextensión Intel F16C (indicada por CPUID.(EAX=1):ECX[29] ), que define formas codificadas en VEX de estas instrucciones, fue adoptada posteriormente tanto por Intel como por AMD.
- ↑ El bit 19 del EDX se utiliza para la identificación de la marca de la CPU solo en
AuthenticAMDlos procesadores de la Familia 6 ; este bit, combinado con la firma del procesador y la velocidad del FSB , se utiliza para identificar los procesadores como compatibles con multiprocesadores o que llevan lamarca Sempron . [ 172 ] - ↑ "SEM" aparece como un bit de característica extendida de CPUID en la documentación de AMD SimNow sin ninguna descripción adicional. [ 190 ] El bit no está activado en ningún procesador conocido, ni es emulado por SimNow.
- ↑ El bit 25 de ECX aparece como StreamPerfMon solo en la revisión 3.20 de AMD APM [ 191 ] ; en revisiones posteriores aparece como reservado. El bit se activa únicamente en las CPU Excavator y Steamroller.
- ↑ Además de usarse como un bit de característica REX32 en algunos procesadores AMD K8, el bit EDX 28 también se establece en algunos procesadores VIA Nehemiah con un propósito desconocido. [ 192 ]
- ↑ La característica REX32 aparece en sandpile.org [ 193 ] [ 194 ] y se describe en una patente antigua [ 195 ] . No aparece en ninguna documentación pública conocida de AMD y solo está presente en las primeras versiones de AMD K8.
- ↑ El bit 31 de ECX no aparece en ninguna documentación pública conocida de AMD, pero se ha observado que está activado en el kit de escritorio AMD 4700S. [ 196 ]
EAX=8000'0002h,8000'0003h,8000'0004h: Cadena de marca del procesador
Estos devuelven la cadena de marca del procesador en EAX, EBX, ECX y EDX. CPUIDDebe emitirse con cada parámetro en secuencia para obtener la cadena completa de marca del procesador ASCII de 48 bytes. [ 197 ] Es necesario comprobar si la característica está presente en la CPU emitiendo CPUIDprimero EAX = 80000000hy comprobando si el valor devuelto no es menor que 80000004h.
La cadena está especificada en la documentación de Intel/AMD como terminada en nulo , sin embargo, este no siempre es el caso (por ejemplo, se sabe que DM&P Vortex86DX3 y AMD Ryzen 7 6800HS devuelven cadenas de marca no terminadas en nulo en hojas 80000002h- 80000004h[ 198 ] [ 199 ] ), y el software no debería depender de ello.
#include <stdio.h> #include <string.h> #include <cpuid.h>int main () { unsigned int regs [ 12 ]; char str [ sizeof ( regs ) + 1 ];__cpuid ( 0x80000000 , regs [ 0 ], regs [ 1 ], regs [ 2 ], regs [ 3 ]);si ( regs [ 0 ] < 0x80000004 ) devolver 1 ;__cpuid ( 0x80000002 , regs [ 0 ], regs [ 1 ], regs [ 2 ], regs [ 3 ]); __cpuid ( 0x80000003 , regs [ 4 ], regs [ 5 ], regs [ 6 ], regs [ 7 ]); __cpuid ( 0x80000004 , regs [ 8 ], regs [ 9 ], regs [ 10 ], regs [ 11 ]);memcpy ( str , regs , sizeof ( regs )); str [ sizeof ( regs )] = '\0' ; printf ( "%s \n " , str );devolver 0 ; }En los procesadores AMD, desde Athlon de 180 nm en adelante ( AuthenticAMDFamilia 6 Modelo 2 y posteriores), es posible modificar la cadena de marca del procesador devuelta por las hojas CPUID 80000002h, 80000004hutilizando la WRMSRinstrucción para escribir una cadena de reemplazo de 48 bytes en los MSR . C0010030h[ 172 ] [ 200 ] Esto también se puede hacer en AMD Geode GX/LX, aunque utilizando MSR . [ 201 ]C0010035h300Ah300Fh
La cadena devuelta por CPUID deja 80000002h, 80000004hfrecuentemente, múltiples espacios al principio, al final o en medio; algunos ejemplos de cadenas de marca de procesador con muchos espacios consecutivos que han aparecido en CPUs de Intel/AMD incluyen:
Intel(R) Core(TM) i7-3960X CPU @ 3.30GHz[ 202 ]Intel(R) Xeon(R) CPU W3670 @ 3.20GHz[ 203 ]AMD EPYC 9655 96-Core Processor[ 204 ]
En algunos casos, determinar el proveedor de la CPU requiere examinar no solo el ID del proveedor en la hoja 0 de CPUID y la firma de la CPU en la hoja 1, sino también la cadena de marca del procesador en las hojas 80000002h- 80000004h. Los casos conocidos incluyen:
- Las CPU Montage Jintide se pueden distinguir de los modelos de CPU Intel Xeon en los que se basan por la presencia de la subcadena
Montageen la cadena de marca de las CPU Montage (por ejemplo, Montage Jintide C2460 [ 205 ] e Intel Xeon Platinum 8160 [ 206 ] , ambos identificados comoGenuineIntelFamily 6 Model 55h Stepping 4, se pueden distinguir de esta manera). CentaurHaulsLas CPU de la familia 6 pueden ser CPU VIA o Zhaoxin; estas se pueden distinguir por la presencia de la subcadenaZHAOXINen la cadena de marca de las CPU Zhaoxin (por ejemplo, Zhaoxin KaiXian ZX-C+ C4580 [ 207 ] y VIA Eden X4 C4250 [ 208 ] , que se identifican comoCentaurHaulsFamily 6 Model 0Fh Stepping 0Eh, se pueden distinguir de esta manera).- El emulador Rosetta 2 x86 de Apple , que se identifica como
GenuineIntelFamilia 6, se puede distinguir del procesador Intel Xeon que emula por la presencia de la subcadenaVirtualAppleen la cadena de marca de Rosetta 2. [ 19 ] - El emulador x86-on-ARM de Microsoft —que, en modo de 64 bits, se identifica como
AuthenticAMDFamilia 0Fh— se puede distinguir del procesador AMD que emula por la presencia de la subcadenaVirtual CPUen la cadena de marca del emulador. [ 19 ]
EAX=8000'0005h: Identificadores de caché L1 y TLB
Esto proporciona información sobre las características de la caché de nivel 1 y la TLB del procesador en EAX, EBX, ECX y EDX de la siguiente manera: [ a ]
- EAX: información sobre TLB de páginas enormes L1 (TLB que contienen entradas correspondientes a páginas de 2M/4M) [ b ]
- EBX: información sobre las TLB de página pequeña L1 (TLB que contienen entradas correspondientes a páginas de 4K)
- ECX: información sobre la caché de datos L1
- EDX: información sobre la caché de instrucciones L1
- ↑ En algunas CPU Cyrix y Geode más antiguas (específicamente,
CyrixInsteadFamilyGeode by NSC5 Model 4),80000005hexiste leaf, pero tiene un formato completamente diferente, similar al de leaf 2. [ 209 ] - ↑ En procesadores que solo pueden manejar páginas pequeñas en sus TLB, esta hoja devolverá 0 en EAX. (En dichos procesadores, que incluyen por ejemplo AMD K6 y Transmeta Crusoe, las entradas de páginas grandes en las tablas de páginas se dividen en páginas de 4K según sea necesario al ingresar a la TLB).En algunos procesadores, por ejemplo VIA Cyrix III "Samuel", [ 210 ] esta hoja devuelve
0x80000005en EAX. Esto tiene el mismo significado que EAX=0, es decir, no hay TLB de páginas grandes. - 1 2 En las CPU Transmeta, el valor
FFhse utiliza para indicar una TLB de 256 entradas. - 1 2 3 Para los campos de asociatividad de la hoja
80000005h, se utilizan los siguientes valores:
EAX=8000'0006h: Características de caché L2 extendidas
Devuelve detalles de la caché L2 en ECX, incluyendo el tamaño de línea en bytes (bits 07 - 00), el tipo de asociatividad (codificado por un campo de 4 bits; bits 15 - 12) y el tamaño de la caché en KiB (bits 31 - 16).
#include <stdio.h> #include <cpuid.h>int main () { unsigned int eax , ebx , ecx , edx ; unsigned int lsize , assoc , cache ;__cpuid ( 0x80000006 , eax , ebx , ecx , edx ); lsize = ecx & 0xff ; assoc = ( ecx >> 12 ) & 0x0f ; cache = ( ecx >> 16 ) & 0xffff ;printf ( "Tamaño de línea: %d B, Tipo de asociación: %d, Tamaño de caché: %d KiB. \n " , lsize , assoc , cache );devolver 0 ; }EAX=8000'0007h: Información de administración de energía del procesador y capacidades RAS
Esta función proporciona información sobre la administración de energía, los informes de energía y las capacidades RAS ( fiabilidad, disponibilidad y facilidad de mantenimiento ) de la CPU.
EAX=8000'0008h: Tamaños de direcciones virtuales y físicas
- 1 2 3 A partir de junio de 2025, los bits 5, 7 y 11 de CPUID.(EAX=8000_0008):EBX no aparecen en ninguna documentación pública conocida de AMD, pero se ha observado que están configurados en los procesadores AMD 4700S Desktop Kit. [ 218 ]
- ↑ La función LMSLE (Long Mode Segment Limit Enable) no tiene su propio indicador CPUID y se detecta comprobando la familia y el modelo de la CPU. Se introdujo en las
AuthenticAMDde la familia 0Fh, modelo 14h [ 219 ] (Athlon64/Opteron de 90 nm) y está presente en todas las CPU AMD posteriores, excepto en aquellas con el indicador 'no_efer_lmsle' activado. - ↑ Un valor de 0 indica que el "Tamaño de la dirección física del invitado" es el mismo que el "Número de bits de la dirección física", especificado en EAX[7:0].
EAX=8000'000Ah: Características de SVM
Esta hoja devuelve información sobre las características de AMD SVM ( Secure Virtual Machine ) en EAX, EBX, ECX y EDX.
- ↑Early revisions of AMD's "Pacifica" documentation listed EAX bit 8 as an always-zero bit reserved for hypervisor use.[223]
Later AMD documentation, such as #25481 "CPUID specification" rev 2.18[224] and later, only lists the bit as reserved.
In rev 2.30[225] and later, a different bit is listed as reserved for hypervisor use: CPUID.(EAX=1):ECX[bit 31].
- ↑EDX bit 9 is briefly listed in some older revisions of AMD's document #25481 "CPUID Specification", and is set only in some AMD Bobcat CPUs.[226]
Rev 2.28 of #25481 lists the bit as "Ssse3Sse5Dis"[227] - in rev 2.34, it is listed as having been removed from the spec at rev 2.32 under the name "SseIsa10Compat".[228]
EAX=8000'001Fh: Encrypted Memory Capabilities
EAX=8000'0021h: Extended Feature Identification
- ↑On Intel processors, support for the instruction-cache prefetch instructions is not indicated by
CPUID.(EAX=8000_0021h):EAX[20]but instead byCPUID.(EAX=7,ECX=1):EDX[14]. - ↑If the downgrade from 512-bit to 256-bit datapath is enabled, then AVX-512 instructions that work on 512-bit data items will be split into two 256-bit parts that will be issued over two consecutive cycles. This datapath downgrade can help improve power efficiency for some workloads.[235]
EAX=8000'0025h: Encrypted Memory Capabilities 2
EAX=8C86'0000h: Hygon Extended Feature Flags
Returns index of highest Hygon feature leaf in EAX (valid if greater than or equal to 8C860000h),[243] and Hygon feature flags in EDX.[244]
EAX=8FFF'FFFEh and EAX=8FFF'FFFFh: AMD Easter Eggs
Several AMD CPU models will, for CPUID with EAX=8FFF'FFFFh, return an Easter egg string in EAX, EBX, ECX and EDX.[245][246] Known Easter Egg strings include:
Additionally, AMD K6 CPUs will, for CPUID with EAX=8FFF'FFFEh, return an Easter egg reference to "DEI" in EAX.[248]
EAX=C000'0000h: Highest Centaur Extended Function
Returns index of highest Centaur leaf in EAX. If the returned value in EAX is less than C0000001h, then Centaur extended leaves are not supported.
Present in CPUs from VIA and Zhaoxin.
On IDT WinChip CPUs (CentaurHauls Family 5), the extended leaves C0000001h-C0000005h do not encode any Centaur-specific functionality but are instead aliases of leaves 80000001h-80000005h.[249]
EAX=C000'0001h: Centaur Feature Information
This leaf returns Centaur feature information (mainly VIA/Zhaoxin PadLock) in EDX.[250][251][252][253] (EAX, EBX and ECX are reserved.)
EAX=C000'0002h: Centaur Extended CPUID Performance Data
This leaf returns information about CPU voltage, temperature, clock multipliers and power-on settings for VIA C7 processors in EAX, EBX, ECX and EDX.[255]
- ↑On the VIA C7, if the on-chip temperature sensor has been turned off, then EAX will return 0.
EAX=C000'0006h, ECX=0: Zhaoxin Feature Information
This sub-leaf returns feature information in EAX. EBX, ECX and EDX are reserved.
CPUID usage from high-level languages
Inline assembly
This information is easy to access from other languages as well. For instance, the C code for gcc below prints the first five values, returned by the cpuid:
#include<stdio.h>#include<cpuid.h>intmain(){unsignedinti,eax,ebx,ecx,edx;for(i=0;i<5;i++){__cpuid(i,eax,ebx,ecx,edx);printf("InfoType %x\nEAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n",i,eax,ebx,ecx,edx);}return0;}In MSVC and Borland/Embarcadero C compilers (bcc32) flavored inline assembly, the clobbering information is implicit in the instructions:
#include<stdio.h>intmain(){unsignedinta,b,c,d,i=0;__asm{/* Do the call. */movEAX,i;cpuid;/* Save results. */mova,EAX;movb,EBX;movc,ECX;movd,EDX;}printf("InfoType %x\nEAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n",i,a,b,c,d);return0;}If either version was written in plain assembly language, the programmer must manually save the results of EAX, EBX, ECX, and EDX elsewhere if they want to keep using the values.
Wrapper functions
GCC also provides a header called <cpuid.h> on systems that have CPUID. The __cpuid is a macro expanding to inline assembly. Typical usage would be:
#include<stdio.h>#include<cpuid.h>intmain(){unsignedinteax,ebx,ecx,edx;__cpuid(0/* vendor string */,eax,ebx,ecx,edx);printf("EAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n",eax,ebx,ecx,edx);return0;}But if one requested an extended feature not present on this CPU, they would not notice and might get random, unexpected results. Safer version is also provided in <cpuid.h>. It checks for extended features and does some more safety checks. The output values are not passed using reference-like macro parameters, but more conventional pointers.
#include<stdio.h>#include<cpuid.h>intmain(){unsignedinteax,ebx,ecx,edx;/* 0x81234567 is nonexistent, but assume it exists */if(!__get_cpuid(0x81234567,&eax,&ebx,&ecx,&edx)){printf("Warning: CPUID request 0x81234567 not valid!\n");return1;}printf("EAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n",eax,ebx,ecx,edx);return0;}Notice the ampersands in &a, &b, &c, &d and the conditional statement. If the __get_cpuid call receives a correct request, it will return a non-zero value, if it fails, zero.[258]
Microsoft Visual C compiler has builtin function __cpuid() so the cpuid instruction may be embedded without using inline assembly, which is handy since the x86-64 version of MSVC does not allow inline assembly at all. The same program for MSVC would be:
#include<stdio.h>#ifdef _MSC_VER#include<intrin.h>#endifintmain(){unsignedintregs[4];inti;for(i=0;i<4;i++){__cpuid(regs,i);printf("The code %d gives %d, %d, %d, %d",regs[0],regs[1],regs[2],regs[3]);}return0;}Many interpreted or compiled scripting languages are capable of using CPUID via an FFI library. One such implementation shows usage of the Ruby FFI module to execute assembly language that includes the CPUID opcode.
.NET 5 and later versions provide the System.Runtime.Intrinsics.X86.X86base.CpuId method. For instance, the C# code below prints the processor brand if it supports CPUID instruction:
usingSystem.Runtime.InteropServices;usingSystem.Runtime.Intrinsics.X86;usingSystem.Text;namespaceX86CPUID{classCPUBrandString{publicstaticvoidMain(string[]args){if(!X86Base.IsSupported){Console.WriteLine("Your CPU does not support CPUID instruction.");}else{Span<int>raw=stackallocint[12];(raw[0],raw[1],raw[2],raw[3])=X86Base.CpuId(unchecked((int)0x80000002),0);(raw[4],raw[5],raw[6],raw[7])=X86Base.CpuId(unchecked((int)0x80000003),0);(raw[8],raw[9],raw[10],raw[11])=X86Base.CpuId(unchecked((int)0x80000004),0);Span<byte>bytes=MemoryMarshal.AsBytes(raw);stringbrand=Encoding.UTF8.GetString(bytes).Trim();Console.WriteLine(brand);}}}}CPU-specific information outside x86
Some of the non-x86 CPU architectures also provide certain forms of structured information about the processor's abilities, commonly as a set of special registers:
- ARM architectures have a
CPUIDcoprocessor register which requires exception level EL1 or above to access.[259] - System/370 through z/Architecture IBM mainframe processors have a supervisor-mode-only Store CPU ID (
STIDP) instruction, which provides information that includes the CPU type.[260][261]:10-147–10-149 - The z/Architecture mainframe processors also have a supervisor-mode-only Store Facilities List (
STFL)[261]:10-149 instruction, and a non-privileged Store Facilities List Extended (STFLE) instruction,:7-394–7-395 which list the installed hardware features. - The MIPS32/64 architecture defines a mandatory Processor Identification (
PrId) and a series of daisy-chained Configuration Registers.[262] - The PowerPC processor has the 32-bit read-only Processor Version Register (
PVR) identifying the processor model in use. The instruction requires supervisor access level.[263] - The RISC-V architecture has an
mcpuid"read-only register containing information regarding the capabilities of the CPU implementation"[264]
DSP and transputer-like chip families have not taken up the instruction in any noticeable way, in spite of having (in relative terms) as many variations in design. Alternate ways of silicon identification might be present; for example, DSPs from Texas Instruments contain a memory-based register set for each functional unit that starts with identifiers determining the unit type and model, its ASIC design revision and features selected at the design phase, and continues with unit-specific control and data registers. Access to these areas is performed by simply using the existing load and store instructions; thus, for such devices, there is no need for extending the register set for device identification purposes.
See also
- sandpile.org, the world's leading source for technical x86 processor information
- x86-cpuid.org, a complete x86 architecture CPUID database plus related code generation tools, to be used by both the Linux Kernel and the Xen hypervisor.[265]
- CPU-Z, a Windows utility that uses
CPUIDto identify various system settings - CPU-X, an alternative of CPU-Z for Linux and FreeBSD
- Spectre (security vulnerability)
- Speculative Store Bypass (SSB)
- /proc/cpuinfo, a text file generated by certain systems containing some of the CPUID information
References
- ↑"Intel 64 and IA-32 Architectures Software Developer's Manual"(PDF). Intel.com. Retrieved 2013-04-11.
- ↑"Detecting Intel Processors - Knowing the generation of a system CPU". Rcollins.org. Retrieved 2013-04-11.
- ↑"LXR linux-old/arch/i386/kernel/head.S". Lxr.linux.no. Retrieved 2013-04-11.
{{cite web}}: CS1 maint: deprecated archival service (link) - 123Debbie Wiles, CPU Identification, archived on 2006-06-04
- ↑B-CoolWare, TMi0SDGL x86 CPU/FPU detection library with source code, v2.15, June 2000 - see /SOURCE/REALCODE.ASM for a large collection of pre-CPUID x86 CPU detection routines. Archived on 14 Mar 2023.
- ↑"CPUID, EAX=4 - Strange results (Solved)". Software.intel.com. Retrieved 2014-07-10.
- ↑instlatx64. "CPUID dump for RDC IAD 100". Archived from the original on 5 December 2019. Retrieved 22 December 2022.
{{cite web}}: CS1 maint: numeric names: authors list (link) - ↑@InstLatX64 (February 28, 2019). "First encounter with "GenuineIotel" (o after I, instead of n)" (Tweet) – via Twitter.
- ↑"GenuineIotel CPUID dump for Intel Xeon E3-1231". instlatx64. Archived from the original on 7 December 2019.
- ↑Grzegorz Mazur, Identification of x86 CPUs with CPUID support, 5 May 1997. Archived from the original on 24 May 1997.
- ↑Ingo Böttcher, CPUDET.PAS v1.61, 23 Oct 1996 - CPU identification program that tests for "AMD ISBETTER" string. Archived on 26 Apr 2024.
- ↑sorgelig (Aug 3, 2017). "ao486 CPUID instruction (in commit 43a2004)". GitHub. Archived from the original on 2023-12-04. Retrieved 2023-12-04.
- 12sorgelig (Aug 30, 2020). "Update cpuid. · MiSTer-devel/ao486_MiSTer@82f5014". GitHub. Archived from the original on 2023-12-04. Retrieved 2023-12-04.
- ↑sorgelig (Aug 30, 2020). "ao486 CPUID instruction". GitHub. Archived from the original on October 23, 2023. Retrieved 4 Dec 2023.
- ↑"v586: 586 compatible soft core for FPGA". GitHub. 6 December 2021.
- 1234smxi, Inxi issue 197: Elbrus CPU support data and implementation. Retrieved 23 October 2023. Archived on 23 October 2023.
- ↑Peter Ferrie, Attacks on More Virtual Machine Emulators, page 5. Archived on 15 Feb 2010.
- 12Amit Singh, Miscellaneous, see Solaris section. Archived from the original on 10 Dec 2004.
- 1234Darek Mihocka, ARM64 Boot Camp: Understanding x86/x64 Emulation on Windows on ARM, 28 Jan 2024, see "Probing CPUID" section. Archived on 24 Feb 2024.
- ↑"Fun with Timers and cpuid - by Jim Cownie - CPU fun". 3 March 2021. Archived from the original on 3 March 2021.
- ↑Insignia Solutions, RealPC Installation and User’s Guide, 1997, p. 71. Archived from the original on 28 Nov 2015.
- ↑Philippe Geneste, (INFO) Emulation PC sur Mac (in French), 21 Jan 1998. Archived on 24 Jun 2025.
- ↑Insignia Solutions, SoftWindows 98 Installation and User's Guide, 1998, p. 127. Archived from the original on 25 Nov 2015.
- ↑VOGONS discussion thread "SIV support for 386/486/586 class + Alpha CPUs and 3dfx + S3 + SiS + Matrox + XGI + old ATI + NVidia GPUs - Testing Help", post by lolo799 on 2021-09-12 17:10 — see SIV32L attachments for a screenshot and a CPUID dump listing the
"Compaq FX!32"string. Archived on 19 May 2024. - ↑Neko Project 21/W, help/configure (in Japanese). Archived on 22 Sep 2024.
- ↑CPU-World, CPUID for emulated Neko Project CPU with "Neko Project" string. Archived on 16 Nov 2025.
- ↑iXBT Labs, VIA Nano CPUID Tricks, Aug 26, 2010. Archived on Aug 29, 2010.
- ↑IDT, WinChip 2A data sheet, v1.0, Jan 1999, page A-3.
- ↑VIA, C3 Nehemiah Datasheet, rev 1.13, Sep 29, 2004, page A-3.
- ↑Agner Fog, CpuIDFake, v1.00, Jan 22, 2010, see "Instructions.txt". Archived on Jul 9, 2010.
- 12Transmeta, Crusoe BIOS Programmer's Guide, Jan 23, 2004, pages 63-65.
- ↑Transmeta, Efficeon BIOS Programmers Guide, Aug 19, 2003, section 8.3, page 148.
- ↑AMD, Geode LX Data Book, pub.id. 33234H, Feb. 2009, page 107. Archived on Dec 3, 2023.
- ↑DM&P, Vortex86EX2_A9133_Master_Data_Sheet_V11_BF, May 8, 2019, page 72.
- ↑"Chapter 3 Instruction Set Reference, A-L"(PDF). Intel 64 and IA-32 Architectures Software Developer's Manual. Intel Corporation. 2018-12-20. Retrieved 2018-12-20.
- ↑Intel, Pentium Processor Family Developer's Manual, 1997, order no. 241428-005, sections 3.4.1.2 (page 91), 17.5.1 (page 489) and appendix A (page 522) provide more detail on how the "processor type" field and the "dual processor" designation work.
- ↑InstLatx64 (17 May 2026). "x86, x64 Instruction Latency, Memory Latency and CPUID dumps".
{{cite web}}: CS1 maint: numeric names: authors list (link) - ↑AMD, Enhanced Am486DX Microprocessor Family, pub.no. 20736 rev B, March 1997, section 9.2.2, page 55. Archived on 18 Oct 2023.
- ↑AMD, ÉlanSC400 and ÉlanSC410 Microcontrollers User's Manual, pub.no. 21030, 1997, section 3.6.2, page 73. Archived on 18 Oct 2023.
- ↑Cyrix, 5x86 BIOS Writers Guide, rev 1.12, order no. 92426-00, 1995, page 7
- 12Cyrix, CPU Detection Guide, rev 1.01, 2 Oct 1997, page 6.
- ↑MiSTer ao486 source code, rtl/ao486/defines.v, line 70. Archived on 23 Oct 2023.
- ↑CPU-World, CPUID for Vortex86DX2 933 MHz. Archived on 15 Nov 2025.
- ↑CPU-World, CPUID for Vortex86EX2. Archived on 7 Sep 2025.
- ↑InstLatx64. "Centaur CNS CPUID dump". Archived from the original on 30 May 2023.
{{cite web}}: CS1 maint: numeric names: authors list (link) - ↑Jeff Atwood, Nasty Software Hacks and Intel's CPUID. Coding Horror, 16 Aug 2005.
- 12Intel, Intel Xeon Phi Coprocessor Instruction Set Architecture Reference Manual, sep 2012, order no. 327364-001, appendix B.8, pages 673-674. Archived on 4 Aug 2021.
- ↑CPU-World, CPUID for Intel Itanium 2 1.50 GHz. Archived on 14 Nov 2025.
- ↑"[PATCH] x86/cpu: Add CPU model numbers for Novalake - Tony Luck". lore.kernel.org. Retrieved 2025-08-16.
- ↑"[PATCH] x86/cpu: Add two Intel CPU model numbers - Tony Luck". lore.kernel.org. Retrieved 2024-09-24.
- ↑InstLatX64. "72-Core Intel Xeon Phi 7290 CPUID dump".
{{cite web}}: CS1 maint: numeric names: authors list (link) - ↑InstLatx64. "96-Core AMD Ryzen Threadripper Pro 7995WX CPUID dump".
{{cite web}}: CS1 maint: numeric names: authors list (link) - ↑Intel Processor Identification and the CPUID Instruction(PDF), Intel, May 2002, archived from the original(PDF) on 2021-04-17
- ↑Linux 6.3 kernel sources, /arch/x86/include/asm/cpuid.h, line 69
- ↑gcc-patches mailing list, CPUID Patch for IDT Winchip, May 21, 2019
- ↑Geoff Chappell, CMPXCHG8B Support in the 32-Bit Windows Kernel, Jan 23, 2008. Archived on Jan 30, 2023.
- ↑AMD, AMD Processor Recognition Application Note, publication #20734, rev D, Jan 1997, page 13
- ↑Intel, AP-485 Application Note - Intel Processor Identification and the CPUID Instruction, order no. 241618-006, march 1997, table 5 on page 10, see bit 10.
- ↑Michal Necasek, SYSENTER, Where Are You?, OS/2 Museum, July 20, 2017
- ↑Intel, TDX module source code, v1.0.03.03, 22 Jun 2023, see src/common/helpers/smrrs.h. Archived on 20 Jan 2025.
- ↑Intel, Trust Domain CPU Architectural Extensions, order no. 343754-002, may 2021. Archived on 17 Dec 2024.
- ↑Intel, Pentium 4 Processor on 90 nm Process Specification Update, order no. 302352-031, sep 2006, see erratum R85 on page 59. Archived on 31 Dec 2008.
- ↑Geoff Chappell, ECX From CPUID Leaf 1, Jan 26, 2020. Archived on May 9, 2020.
- ↑Huggahalli, Ram; Iyer, Ravi; Tetrick, Scott (2005). "Direct Cache Access for High Bandwidth Network I/O". ACM SIGARCH Computer Architecture News. 33 (2): 50–59. CiteSeerX 10.1.1.85.3862. doi:10.1145/1080695.1069976. CiteSeerX:10.1.1.91.957.
- ↑Drepper, Ulrich (2007), What Every Programmer Should Know About Memory, CiteSeerX:10.1.1.91.957
- 12Intel, Itanium Architecture Software Developer's Manual, rev 2.3, volume 4: IA-32 Instruction Set, may 2010, document number: 323208, table 2-5, page 4:81, see bits 20 and 30. Archived on Feb 15, 2012.
- ↑Intel, AP-485, Processor Identification and the CPUID Instruction flag, rev 30, jan 2006, page 26
- ↑Michal Necasek, HTT Means Hyper-Threading, Right?, OS/2 Museum, dec 11, 2017
- ↑"Mechanisms to determine if software is running in a VMware virtual machine". VMware Knowledge Base. VMWare. 2015-05-01.
Intel and AMD CPUs have reserved bit 31 of ECX of CPUID leaf 0x1 as the hypervisor present bit. This bit allows hypervisors to indicate their presence to the guest operating system. Hypervisors set this bit and physical CPUs (all existing and future CPUs) set this bit to zero. Guest operating systems can test bit 31 to detect if they are running inside a virtual machine.
- ↑Kataria, Alok; Hecht, Dan (2008-10-01). "Hypervisor CPUID Interface Proposal". LKML Archive on lore.kernel.org. Archived from the original on 2019-03-15.
Bit 31 of ECX of CPUID leaf 0x1. This bit has been reserved by Intel & AMD for use by hypervisors and indicates the presence of a hypervisor. Virtual CPU's (hypervisors) set this bit to 1 and physical CPU's (all existing and future CPU's) set this bit to zero. This bit can be probed by the guest software to detect whether they are running inside a virtual machine.
- ↑"AMD64 Technology AMD64 Architecture Programmer's Manual Volume 2: System Programming"(PDF) (3.41 ed.). Advanced Micro Devices, Inc. p. 498. 24593. Archived from the original(PDF) on 30 Sep 2023. Retrieved 9 September 2023.
15.2.2 Guest Mode This new processor mode is entered through the VMRUN instruction. When in guest mode, the behavior of some x86 instructions changes to facilitate virtualization. The CPUID function numbers 4000_0000h-4000_00FFh have been reserved for software use. Hypervisors can use these function numbers to provide an interface to pass information from the hypervisor to the guest. This is similar to extracting information about a physical CPU by using CPUID. Hypervisors use the CPUID Fn 400000[FF:00] bit to denote a virtual platform. Feature bit CPUID Fn0000_0001_ECX[31] has been reserved for use by hypervisors to indicate the presence of a hypervisor. Hypervisors set this bit to 1 and physical CPU's set this bit to zero. This bit can be probed by the guest software to detect whether they are running inside a virtual machine.
- ↑Intel SDM vol 2A, order no. 253666-053, Jan 2015, p. 244
- 12Intel, Processor Identification and the CPUID Instruction Application Note 485, order no. 241618-037, Jan 2011, pages 31-32. Archived on 17 Oct 2023.
- ↑Intel, Itanium Processor Reference Manual for Software Development, rev 2.0, order no. 245320-003, December 2001, page 110. Archived from the original on 18 Feb 2004.
- 12Intel, Processor Identification and the CPUID Instruction Application Note 485, order no. 241618-036, Aug 2009, page 26. Archived on 6 Oct 2023.
- ↑InstLatX64, Willamette-128 CPUID dump. Archived on 7 Dec 2019.
- ↑InstLatX64, Northwood-128 CPUID dump. Archived on 7 Dec 2019.
- ↑InstLatX64, Prescott-256 CPUID dump. Archived on 6 Dec 2019.
- ↑InstLatX64, Intel Tolapai CPUID dump. Archived on 19 Jan 2019.
- ↑Jason Gaston, (PATCH 2.6.24-rc5) x86 intel_cacheinfo.c: cpu cache info entry for Intel Tolapai, LKML, 20 Dec 2007. Archived on 9 Nov 2024.
- ↑VIA-Cyrix, Application Note 120: Cyrix III CPU BIOS Writer's Guide, rev 1.1, 24 Nov 1999, page 13. Archived from the original on 29 Sep 2000.
- ↑InstlatX64, Intel Atom 230 CPUID dump. Archived on 7 Dec 2019.
- ↑WikiChip, Bonnell. Archived on 16 Jul 2017.
- ↑Cyrix, Cyrix CPU Detection Guide, rev 1.01, 2 Oct 1997, page 13.
- ↑CPU-World forum, Working Timna desktop 2023, page 2 - lists a CPUID dump from a Timna engineering sample. Archived on 9 Nov 2024.
- ↑Geoff Chappell, CPUID Leaf 2, 26 Jan 2020. Archived on Sep 4, 2023.
- ↑Intel, Itanium 2 Processor Reference Manual, order no. 251110-003, May 2004, page 192. Archived from the original on 7 Dec 2006.
- ↑Intel, Itanium 2 Processor Specification Update, order.no. 251141-028, Nov 2004, erratum 6 on page 26. Archived from the original on 25 Nov 2004.
- ↑Intel, Atom C3000 Processor Product Family Specification Update, order no. 336345-020, page 16, Mar 2023. Archived on 7 Oct 2023.
- ↑Intel, 6th Generation Intel Processor Specification Update, order no. 332689-030, July 2023, see erratum SKL148 on page 66. Archived from the original on 8 mar 2023.
- ↑Intel, 10th Generation Intel Core Processor Specification Update, order no. 615213-013, apr 2023, see erratum CML081 on page 41. Archived on 19 Jul 2024.
- ↑Intel, Xeon Processor 7500 Series Datasheet, order no. 323341-001, March 2010, page 150. Archived on Oct 8, 2023.
- ↑Intel, Optimization Reference Manual, volume 1, order no. 248966-049, jan 2024, chapter 9.6.3.3, p. 361. Archived on 19 Apr 2024.
- ↑Intel, AP-909 Application Note: Processor Serial Number, order no. 245125-001, March 1999. Archived from the original on 21 Jan 2004.
- ↑Transmeta, Processor Recognition, 7 May 2002, page 4. Archived from the original on 19 March 2003.
- ↑Transmeta, Crusoe BIOS Programmer's Guide, 23 Jan 2004, page 12. Archived from the original on 13 May 2005.
- ↑InstlatX64, Transmeta Efficieon 86x0 CPUID dump, see CPUID 00000003. Archived on 7 Dec 2019.
- ↑Intel, Processor Identification and the CPUID Instruction, order no. 241618-031, sep 2006, page 32.
- ↑InstLatx64, Intel Xeon Phi 7210 CPUID dump. Archived on 13 May 2025.
- 12Shih Kuo (Jan 27, 2012). "Intel 64 Architecture Processor Topology Enumeration".
- ↑"Processor and Core Enumeration Using CPUID | AMD". Developer.amd.com. Archived from the original on 2014-07-14. Retrieved 2014-07-10.
- ↑"Sandybridge processors report incorrect core number?". Software.intel.com. 2012-12-29. Retrieved 2014-07-10.
- ↑"cpuid, __cpuidex". Msdn.microsoft.com. 2014-06-20. Retrieved 2014-07-10.
- ↑"topology.cpp in ps/trunk/source/lib/sysdep/arch/x86_x64 – Wildfire Games". Trac.wildfiregames.com. 2011-12-27. Archived from the original on 2021-03-09. Retrieved 2014-07-10.
- ↑Hyper-Threading Technology and Multi-Core Processor Detection
- ↑Intel, Architecture Instruction Set Extensions Programming Reference, order no. 319433-052, March 2024, chapter 17. Archived on Apr 7, 2024.
- ↑Intel, Intel Processor Identification and the CPUID Instruction (AP-485, rev 30), order no. 241618-030, Jan 2006, page 19.
- ↑Intel, Intel 64 and IA-32 Architecture Software Developer's Manual, order no. 352462-079, volume 3B, section 15.4.4.4, page 3503
- ↑Intel, Processor Identification and the CPUID Instruction, order no. 241618-038, apr 2012, p.38
- ↑Intel, Product Change Notification 108701, 1 aug 2008. Archived on May 11, 2023
- 12"Performance Monitoring Impact of Intel Transactional Synchronization Extension Memory Ordering Issue"(PDF). Intel. June 2023. p. 8. Retrieved 8 May 2024.
- 123Intel, Architecture Specification: Intel Trust Domain Extensions (Intel TDX) Module, order no. 344425-001, sep 2020, pages 120-122. Archived from the original on Jul 29, 2021.
- ↑Intel, Deprecating the PCOMMIT instruction, sep 12, 2016. Archived on Mar 5, 2024.
- ↑Intel, AVX512-FP16 Architecture Specification (PDF), document number 347407-001, June 2021. Archived on Oct 26, 2022
- 1234"Speculative Execution Side Channel Mitigations"(PDF). Revision 2.0. Intel. May 2018 [January 2018]. Document Number: 336996-002. Retrieved 2018-05-26.
- ↑"IBRS patch series [LWN.net]".
- ↑Intel, X86S External Architecture Specification v1.2, June 2024, order no. 351407-002, section 3.5, page 13. Archived from the original on 2 Oct 2024.
- ↑Intel, Envisioning a Simplified Intel Architecture - as of 20 Dec 2024, contains a mention that Intel has chosen not to pursue X86S. Archived on 20 Dec 2024.
- 123Intel, Flexible Return and Event Delivery (FRED) Specification, rev 6.1, December 2023, order no. 346446-007, page 14. Archived on Dec 22, 2023.
- ↑Intel, Software Developer's Manual, order no. 325462-080, June 2023 - information about prematurely busy shadow stacks provided in Volume 1, section 17.2.3 on page 410; Volume 2A, table 3.8 (CPUID EAX=7,ECX=2) on page 820; Volume 3C, table 25-14 on page 3958 and section 26.4.3 on page 3984.
- ↑Intel, Complex Shadow-Stack Updates (Intel Control-Flow Enforcement Technology), order no. 356628-001, August 2023. Archived on 2 Apr 2024.
- ↑LKML, Re: (PATCH v3 00/21) Enable CET Virtualization, Jun 16, 2023 - provides additional discussion of how the CET-SSS prematurely-busy stack issue interacts with virtualization. Archived on 7 Aug 2023.
- 12Intel, Advanced Vector Extensions 10, rev 1.0, July 2023, order no. 355989-001. Archived on Jul 24, 2023.
- 12Intel, Advanced Performance Extensions - Architecture Specification, rev 2.0, Aug 2023, order no. 355828-002, page 37. Archived on Sep 10, 2023.
- ↑Intel, TDX Module ABI tables, April 2026 drafts, see /PDF/cpuid_virtualization.pdf pages 6-7. Archived on 1 May 2026.
- ↑Intel, Fast Store Forwarding Predictor, 8 Feb 2022. Archived on 6 Apr 2024.
- 123Intel, Branch History Injection and Intra-mode Branch Target Injection / CVE-2022-0001, CVE-2022-0002 / INTEL-SA-00598, 4 Aug 2022. Archived on 11 Feb 2024.
- ↑Intel, Return Stack Buffer Underflow / CVE-2022-29901, CVE-2022-28693 / INTEL-SA-00702, 12 Jul 2022. Archived on 3 Jul 2024.
- ↑Intel, Data Dependent Prefetcher, 10 Nov 2022. Archived on 4 Aug 2024.
- ↑Intel, MONITOR and UMONITOR Performance Guidance, 10 Jul 2024. Archived on 27 Nov 2024.
- ↑InstLatx64, Intel Core i7-1065G7 CPUID dump — has the SGX oversubscription feature bits set (CPUID.(EAX=12h,ECX=0).EAX[6:5]). Archived on 6 Dec 2019.
- ↑Intel SGX Virtualization, KVM Forum 2018, p.19. Archived on 17 Nov 2019.
- ↑Intel, Asynchronous Enclave Exit Notify and the EDECCSSA User Leaf Function, 30 Jun 2022. Archived on 21 Nov 2022.
- ↑Linux kernel git commit 604dc91, x86/tsc: Use CPUID.0x16 to calculate missing crystal frequency, 9 May 2019 - contains notes on computing the Core Crystal Clock frequency on CPUs that don't specify it, and corresponding C code.
- ↑Intel, SDM Volume 3A, order no 253668-083, March 2024, chapter 11.5.4, page 408
- ↑instlatx64, Spreadtrum SC9853I-IA CPUID dump
- ↑"Intel® Architecture Instruction Set Extensions and Future Features"(PDF) (58th ed.). Jun 2025. p. 41. 319433-058. Archived(PDF) from the original on 17 Jul 2025. Retrieved 30 Oct 2025.
- ↑"Intel® Architecture Instruction Set Extensions and Future Features"(PDF) (59th ed.). 2 Oct 2025. p. 41. 319433-059. Archived(PDF) from the original on 3 Oct 2025. Retrieved 3 Oct 2025.
- ↑"Intel® Architecture Instruction Set Extensions and Future Features"(PDF) (62nd ed.). 27 Jun 2026. p. 41. 319433-062. Retrieved 27 Jun 2026.
{{cite web}}: CS1 maint: url-status (link) - ↑Intel, Architecture Specification: Intel Trust Domain Extensions (Intel TDX) Module, order no. 344425-005, page 93, Feb 2023. Archived on 20 Jul 2023.
- ↑Intel, Intel Advanced Vector Extensions 10 Architecture Specification, order no. 355989-003US, July 2024, see revision history on page 13. Archived on 8 Oct 2024.
- ↑Intel, Trust Domain Extensions (Intel TDX) Module Base Architecture Specification, order no. 348549-006US, April 2025, p. 116. Archived on 24 Apr 2025.
- ↑Intel, Advanced Vector Extensions 10.2 Architecture Specification, revision 4.0, order no. 361050-004US, May 2025, p. 16. Archived on 25 May 2025.
- ↑"AI Compute Extensions (ACE) Specification"(PDF). x86 Ecosystem Advisory Group (published 15 June 2026). 15 May 2026. p. 10. Retrieved 18 June 2026.
- 12Intel, Intel Xeon Phi Coprocessor Instruction Set Architecture Reference Manual, Sep 2012, order no. 327364-001, appendix B.8, pages 677. Archived on 4 Aug 2021.
- 12Microsoft, Hyper-V Feature and Interface Discovery, 8 Jul 2022. Archived on 18 Nov 2023.
- ↑Geoff Chappell, HV_HYPERVISOR_INTERFACE, 10 Dec 2022. Archived on 1 Feb 2023.
- ↑David Woodhouse, Extended Destination ID: Supporting x86 virtual machines with many vCPUs, 20 Aug 2025, page 4. Archived on 23 Aug 2025.
- ↑QEMU documentation, Hyper-V Enlightenments. Archived on 17 Apr 2024.
- ↑Linux 6.8.7 kernel source, /source/arch/x86/kvm/cpuid.c, lines 1482-1488
- 12Xen, CPUID Interface to Xen. Archived on 22 Apr 2024.
- ↑Linux kernel documentation, KVM CPUID bits. Archived on 22 Aug 2022.
- ↑Linux 6.8.7 kernel source, /arch/x86/kvm/hyperv.c, line 2793
- ↑Linux kernel documentation, Virtualization support: 4.118 KVM_GET_SUPPORTED_HV_CPUID. Archived on 26 Mar 2024.
- ↑FreeBSD commit 560d5ed, 28 Jun 2013, see file /sys/amd64/vmm/x86.c, line 48. Archived on 22 Apr 2024.
- ↑HyperKit source code, /src/lib/vmm/x86.c line 42, 8 May 2021.
- ↑QEMU source code, fb/target/i386/cpu.c, line 6475, 18 Mar 2024.
- ↑Xakep, Детектим виртуалки [Detecting Virtual Machines] (in Russian), 8 Nov 2013 - lists the values returned in EBX/ECX/EDX for CPUID.(EAX=40000000) on Parallels Workstation as 0x70726c20, 0x68797065 and 0x72762020, respectively - which corresponds to the endianness-swapped
" lrpepyh vr"string. Archived on 25 Mar 2015. - ↑VMWare, Mechanisms to determine if software is running in a VMware virtual machine, 1 May 2015. Archived on 23 Jan 2022.
- ↑Project ACRN, CPUID Virtualization, 20 Oct 2022. Archived on 25 Mar 2023.
- ↑VirtualBox documentation, 9.30 Paravirtualized Debugging. Archived on 22 Apr 2024.
- ↑QNX, Hypervisor - Checking the guest's environment, 25 Mar 2022. Archived on 22 Apr 2024.
- ↑NetBSD source code, /sys/dev/nvmm/x86/nvmm_x86_vmx.c, line 1430, 6 Nov 2023.
- ↑OpenBSD source code, /sys/arch/amd64/include/vmmvar.h, line 24, 9 Apr 2024.
- ↑Siemens Jailhouse hypervisor documentation, hypervisor-interfaces.txt, line 39, 27 Jan 2020. Archived on Jul 5, 2024.
- ↑Bitdefender Napoca source code, /napoca/kernel/guestenlight.c, line 293, 30 Jul 2020.
- ↑FEX-Emu documentation, FEXCore custom CPUID functions, 24 May 2024.
- ↑Intel HAXM source code, /core/cpuid.c, line 979, 20 Jan 2023. Archived on 22 Apr 2024.
- ↑Intel KGT source code (trusty branch), /vmm/vmexit/vmexit_cpuid.c, lines 17-75, 15 May 2019
- ↑Linux kernel v5.18.19 source code, /source/drivers/visorbus/visorchipset.c, line 28
- ↑N. Moore, virt: Support detection of LMHS SRE guests #25594, 1 Dec 2022 - Lockheed Martin-provided pull-request for systemd, adding CPUID hypervisor ID string for the LMHS SRE hypervisor. Archived on 23 Apr 2024.
- 123AMD, Processor Recognition Application Note, pub.no. 20734, rev. 3.13, december 2005:
- Section 2.2 (p.19) provides a description of leaf 1 vs leaf 80000001 processor family numbers.
- Section 2.2.2 (p.21) and Section 3 (pages 33 to 40) provide details on how CPUID.(EAX=8000_0001):EDX[bit 19] should be used to identify processors.
- Section 3 also provides information on AMD's brand name string MSRs.
- ↑CPUID Specification, publication no.25481, rev 2.34(PDF), AMD, September 2010, archived from the original(PDF) on 18 Aug 2022
- ↑Linux kernel source code
- ↑AMD, AMD-K6 Processor Data Sheet, order no. 20695H/0, march 1998, section 24.2, page 283
- ↑AMD, AMD-K6 Processor Revision Guide, order no. 21846H/0, June 1999, section 3.2.1, page 17
- ↑Brian Gerst, syscall w/6 args support?, Linux kernel mailing list, 8-9 Dec 1999. Archived on 10 Mar 2026.
- ↑Intel, Intel 64 and IA-32 Architectures Software Developer's Manual, order no. 325462-079, march 2023, table 3-8 on page 3-238
- ↑AMD, AMD64 Technology: 128-bit SSE5 Instruction Set, pub.no. 43479, rev. 3.01, Aug 2007, section 1, page 1. Archived from the original on 19 Aug 2014.
- 12Sandpile.org, x86 architecture CPUID, extended leaf 8000_0001h, accessed 25 Apr 2026. Archived on 20 Aug 2026
- ↑Sandpile.org, x86 architecture XOP opcodes. Archived on 11 Sep 2024.
- ↑Lightweight Profiling Specification(PDF), AMD, August 2010, archived from the original(PDF) on 2012-11-27, retrieved 2013-04-03
- ↑Cyrix, Cyrix CPU Detection Guide, rev 1.01, oct 2, 1997, page 12
- ↑AMD, Geode GX1 Processor Data Book, rev 5.0, december 2003, pages 202 and 226. Archived on 20 Apr 2020.
- ↑Transmeta, Processor Recognition, 2002-05-07, page 5
- ↑Instlatx64, AMD Athlon "Thunderbird" CPUID dump. [https://web.archive.org/web/20250515140345/https://instlatx64.github.io/InstLatx64/AuthenticAMD/AuthenticAMD0000644_K7_Thunderbird_CPUID.txt Archived on 15 May 2025.
- ↑OS/2 Museum, Mystery CPUID bit, see comment by "CL" on 22 Apr 2026. Archived on 25 Aug 2026.
- ↑AMD, AMD64 Architecture Programmer’s Manual Volume 6: 128-Bit and 256-Bit XOP, FMA4 and CVT16 Instructions, pub.no. 43479, rev 3.03, May 2009, page 23. Archived on 18 Jan 2023
- ↑AMD, Family 10h BKDG, document no. 31116, rev 3.62, jan 11, 2013, p. 388 - lists the NodeId bit. Archived on 16 Jan 2019.
- ↑AMD, SimNow Simulator 4.6.1 User's Manual, rev 2.13, Nov 2009, page 187. Archived from the original on 24 may 2012.
- ↑AMD, AMD64 Architecture Programmer's Manual Volume 3, pub. no. 24594, rev 3.20, may 2013, page 579 - lists the StreamPerfMon bit
- ↑InstLatx64, VIA C5XL Nehemiah (stepping 1) CPUID dump. Archived on 7 Oct 2025
- ↑"sandpile.org -- x86 architecture -- CPUID". www.sandpile.org. Retrieved 2026-04-20.
- ↑Sandpile.org, x86 architecture vector floating-point registers, see bottom of page. Archived on 13 Nov 2025.
- ↑AMD, US Patent 6877084B1: Central processing unit (CPU) accessing an extended register set in an extended register mode, granted on 5 Apr 2004, expired in 2023.
- ↑InstLatX64, AMD 4700S CPUID dump. Archived on 10 Oct 2025.
- ↑"Intel Processor Identification and the CPUID Instruction"(PDF). Download.intel.com. 2012-03-06. Retrieved 2013-04-11.
- ↑InstLatx64, Vortex86DX3 CPUID dump, 27 Sep 2021. Archived on 21 Oct 2021.
- ↑InstLatx64, AMD Ryzen 7 6800HS CPUID dump, 21 Feb 2022. Archived on 24 Mar 2023.
- ↑Chips and Cheese, Why you can't trust CPUID, 27 Oct 2022. Archived on 3 Nov 2022.
- ↑AMD, Geode LX Databook, pub.id. 33234H, Feb 2009, page 207.
- ↑InstLatx64, HexaCore Intel Core i7-3960X Extreme Edition CPUID dump
- ↑InstLatx64, HexaCore Intel Xeon W3670 CPUID dump
- ↑InstLatx64, AMD EPYC 9655 CPUID dump
- ↑InstLatx64, 2x 24-core Montage Jintide C2460 CPUID dump
- ↑InstLatx64, 2x 24-core Intel Xeon Platinum 8160 CPUID dump
- ↑InstLatx64, Zhaoxin KaiXian ZX-C+ C4580 CPUID dump
- ↑InstLatx64, VIA Eden X4 C4250 CPUID dump
- ↑Cyrix, Application Note 112: Cyrix CPU Detection Guide, page 17, 21 July 1998.
- ↑Instlatx64, VIA Cyrix III "Samuel" CPUID dump
- 12345Sandpile, x86 architecture CPUID, extended leaf 8000_0007h. Archived on 20 Apr 2026.
- ↑AMD, BKDG for AMD Family 10h Processors, pub.no. 31116, rev 3.62, jan 11, 2013, page 392. Archived on 16 Jan 2019.
- 1234AMD, PPR For AMD Family 19h Model 61h rev B1 procesors, pub.no. 56713, rev 3.05, Mar 8, 2023, pages 99-100. Archived on 25 Apr 2023.
- 12AMD, AMD64 Collaborative Processor Performance Control (CPPC) Performance Priority, pub.no. 69206, rev 1.10, 4 Mar 2026. Archived on 9 Mar 2026.
- ↑AMD, AMD64 Collaborative Processor Performance Control (CPPC) Performance Priority, pub.no. 69206, rev 1.00, 25 Feb 2026. Archived on 27 Feb 2026.
- ↑AMD, BKDG for AMD Family 16h Models 00-0Fh processors, pub.no. 48571, rev 3.03, Feb 19, 2015, page 482. Archived on 16 Jan 2019.
- ↑SpecterDev, Next-Gen Exploitation: Exploring the PS5 Security Landscape, June 2023 hardwear.io conference presentation slide deck, pages 34, 41 and 53. Archived on 10 Jun 2023.
- ↑Instlatx64, AMD 4700S 8-core Processor Desktop Kit CPUID dump
- ↑AMD, BIOS and Kernel Developer's Guide for AMD Athlon 64 and AMD Opteron Processors, publication #26094, rev 3.30, feb 2006, pages 29-30 (lists Athlon 64 revision differences, including LMSLE) (archived on 16 Jan 2019), and Revision Guide for AMD Athlon 64 and AMD Opteron Processors, publication #25759, rev 3.79, july 2009, pages 7-8 (lists Athlon 64 revision IDs) (archived on 18 Jan 2019).
- ↑AMD, PPR for AMD Family 19h Model 01h, Revision B1 Processors, Volume 1 of 2, document no. 55898, rev 0.50, may 27, 2021, page 98 - lists branch-sampling bit. Archived on Jul 24, 2022
- ↑AMD, AMD64 Guest PMC Event Filtering, pub.no. 69202, rev 1.00, 27 Feb 2026. Archived on 11 Mar 2026.
- ↑AMD, AMD64 Page Modification Logging, pub.no. 69208, rev 1.00, 10 Mar 2026. Archived on 11 Mar 2026.
- ↑AMD, AMD64 Virtualization Codenamed "Pacifica" Technology, publication no. 33047, rev 3.01, May 2005, appendix B, page 81. Archived on Jun 13, 2011.
- ↑AMD, CPUID specification, publication #25481, revision 2.18, jan 2006, page 18.
- ↑AMD, CPUID specification, publication #25481, revision 2.34, sep 2010, pages 5 and 11.
- ↑Instlatx64, AMD E-350 CPUID dump - has CPUID.(EAX=8000000A):EDX[9] set.
- ↑AMD, CPUID specification, publication #25481, revision 2.28, apr 2008, page 21.
- ↑AMD, CPUID specification, publication #25481, revision 2.34, sep 2010, page 5 - lists "SseIsa10Compat" as having been dropped in November 2009.
- 12AMD, PPR for AMD Family 19h Model 61h, Revision B1 processors, document no. 56713, rev 3.05, mar 8 2023, page 102. Archived on Apr 25, 2023.
- 1234AMD, Processor Programming Reference (PPR) for AMD Family 1Ah Model 70h, Revision B0 Processors, order no. 57930, rev 3.00, 30 Apr 2025, pages 103, 119 and 200. Archived on 19 Jan 2026.
- 123OpenAnolis cloud kernel 6.6 documentation, Hygon Secure Virtualization. Archived on 12 Mar 2026.
- ↑AMD, Secure VM Service Module for SEV-SNP Guests, pub.no #58019, rev 1.00, Jul 2023, page 13. Archived on 5 Aug 2023.
- 12AMD, PPR for AMD Family 19h Model 61h, Revision B1 processors, document no. 56713, rev 3.05, mar 8 2023, page 116. Archived on Apr 25, 2023.
- 123AMD, Technical Guidance For Mitigating Transient Scheduler Attacks, rev 2.0, July 2025, page 3. Archived on 14 Aug 2025.
- ↑AMD, 5th Gen AMD EPYC Processor Architecture, First Edition, October 2024, page 9. Archived on 28 Dec 2024.
- ↑Binutils mailing list, [PATCH] Add AMD znver6 processor support, 7 Nov 2025.
- ↑AMD, AMD64 Bit Matrix Multiply and Bit Reversal Instructions, pub.no. 69192, rev 1.00, 30 Jan 2026. Archived on 27 Feb 2026.
- ↑AMD, AMD64 Upper Address Ignore Version 2, pub.no. 69207, rev 1.00, 10 Mar 2026. Archived on 11 Mar 2026.
- 12345AMD, Technical Update Regarding Speculative Return Stack Overflow, rev 2.0, feb 2024. Archived on Apr 12, 2024.
- ↑AMD, AMD64 RMPOPT, pub.no. 69201, rev 1.00, Feb 2026. Archived on 26 Feb 2026.
- ↑AMD, AMD64 Enhanced SMT Protection, pub.no. 69204, rev 1.00, Mar 2026. Archived on 29 Mar 2026.
- ↑AMD, AMD64 RMP Dirty, pub.no. 69203, rev 1.00, Feb 2026. Archived on 25 Feb 2026.
- ↑OpenEuler kernel 6.6, arch/x86/kernel/cpu/hygon.c, line 255. Archived on 14 mar 2026.
- ↑OpenEuler kernel 6.6, arch/x86/include/asm/cpufeatures.h, line 499. Archived on 14 Mar 2026.
- ↑Ferrie, Peter. "Attacks on Virtual Machine Emulators"(PDF). Symantec. Symantec Advanced Threat Research. Archived from the original(PDF) on 2007-02-07. Retrieved 15 March 2017.
- ↑Sandpile, x86 architecture CPUID. Retrieved 22 December 2022.
- ↑instlatx64, CPUID dump of AMD A4-5000, lists "HELLO KITTY" string for CPUID leaf
8FFFFFFFh. Retrieved 22 December 2022. - ↑Sandpile, x86 architecture CPUID. Retrieved 30 July 2025.
- ↑IDT, WinChip 2B Processor Data Sheet, v0.9, April 1999, chapter 3.3.3, page 31.
- ↑VIA, PadLock Programming Guide rev. 1.66, aug 4, 2005, page 5. Archived from the original on May 26, 2010
- ↑OpenEuler 1.0 LTS kernel sources, /arch/x86/include/asm/cpufeatures.h lines 147-178. Archived on Jul 30, 2023.
- ↑Zhaoxin, Padlock instruction set reference, 26 Dec 2024. Archived from the original on 15 Mar 2025.
- ↑Zhaoxin, GMI reference, 26 Dec 2024. Archived from the original on 15 Mar 2025.
- ↑VIA, C3 Nehemiah Processor Datasheet, rev 1.13, Sep 29, 2004, page 21
- ↑VIA Technologies, VIA C7 Processor in nanoBGA2 Datasheet, rev 1.80, 9 Feb 2006, section 2.3.4 on page 21. Archived on 12 Apr 2021.
- ↑Zhaoxin, PAUSEOPT 指令说明, section 3.1.1 (in Chinese), rev 1.0.0, 13 Aug 2024. Archived on 14 Jan 2026.
- ↑InstLatx64, Zhaoxin KaiXian KX-7000 CPUID dump. Archived on 1 May 2026.
- ↑"GCC-mirror/GCC". GitHub. 13 March 2022.
- ↑"ARM Information Center". Infocenter.arm.com. Retrieved 2013-04-11.
- ↑IBM System/370 Principles Of Operation(PDF) (First ed.). IBM. June 1970. p. 29. GA22-7000-0.
- 12z/Architecture Principles of Operation(PDF) (Fourteenth ed.). May 2022. SA22-7832-13.
- ↑"MIPS32 Architecture For Programmers, Volume III: The MIPS32 Privileged Resource Architecture"(PDF). MIPS Technologies, Inc. 2001-03-12.
- ↑"PowerPC Operating Environment Architecture, book III"(PDF).
- ↑"The RISC-V Instruction Set Manual Volume II: Privileged Architecture Version 1.7"(PDF). May 9, 2015. section 3.1.1.
- ↑S. Darwish, Ahmed. "[ANNOUNCE] x86-cpuid.org: A machine-readable CPUID repository". Linux Kernel Mailing List archive. Retrieved 20 July 2024.
Further reading
- "AMD64 Technology Indirect Branch Control Extension"(PDF) (White paper). Revision 4.10.18. Advanced Micro Devices, Inc. (AMD). 2018. Archived(PDF) from the original on 2018-05-09. Retrieved 2018-05-09.
External links
- Intel Processor Identification and the CPUID Instruction (Application Note 485), last published version. Said to be incorporated into the Intel 64 and IA-32 Architectures Software Developer's Manualin 2013, but as of July 2014 the manual still directs the reader to note 485.
- Contains some information that can be and was easily misinterpreted though, particularly with respect to processor topology identification.
- The big Intel manuals tend to lag behind the Intel ISA document, available at the top of this page, which is updated even for processors not yet publicly available, and thus usually contains more CPUID bits. For example, as of this writing, the ISA book (at revision 19, dated May 2014) documents the CLFLUSHOPT bit in leaf 7, but the big manuals although apparently more up-to-date (at revision 51, dated June 2014) don't mention it.
- AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions
- cpuid command-line program for Linux
- cpuprint.com, cpuprint.exe, cpuprint.raw command-line programs for Windows
- instlatx64 : colección de volcados de latencia de instrucciones, latencia de memoria y CPUID para arquitecturas x86/x64.
- Arquitectura X86
- Código máquina
- Instrucciones X86