CPUID

Instruction for x86 microprocessors

В архитектуре x86 инструкция CPUID (идентифицируется кодом CPUID операции ) является дополнительной инструкцией процессора (ее название происходит от CPU Identification), позволяющей программному обеспечению обнаруживать детали процессора. Она была представлена ​​Intel в 1993 году с выпуском процессоров Pentium и SL-enhanced 486. [1]

Программа может использовать его для определения типа процессора и реализации CPUIDтаких функций, как MMX / SSE .

История

До того, как эта инструкция стала общедоступной CPUID, программисты писали сложный машинный код , который использовал незначительные различия в поведении ЦП, чтобы определить марку и модель процессора. [2] [3] [4] [5] С появлением процессора 80386 EDX при сбросе указывал версию, но это можно было прочитать только после сброса, и не было стандартного способа для приложений считывать это значение.

За пределами семейства x86 разработчикам по-прежнему в основном приходится использовать экзотические процессы (включая синхронизацию инструкций или триггеры сбоев ЦП) для определения имеющихся изменений в конструкции ЦП.

Например, в семействе Motorola 680x0 — в котором никогда не было CPUIDинструкций любого вида — некоторые конкретные инструкции требовали повышенных привилегий. Они могли использоваться для различения различных членов семейства ЦП. В Motorola 68010 инструкция MOVE из SR стала привилегированной. Это заметное изменение инструкции (и конечного автомата) позволило 68010 соответствовать требованиям виртуализации Попека и Голдберга . Поскольку 68000 предлагал непривилегированный MOVE из SR, два разных ЦП можно было различить по срабатыванию состояния ошибки ЦП.

Хотя эта CPUIDинструкция специфична для архитектуры x86, другие архитектуры (например, ARM) часто предоставляют регистры на кристалле, которые можно считывать заданными способами для получения тех же видов информации, которые предоставляет CPUIDинструкция x86.

Вызов CPUID

Код операции CPUID0F A2.

На языке ассемблера инструкция CPUIDне принимает параметров, поскольку CPUIDнеявно использует регистр EAX для определения основной категории возвращаемой информации. В более поздней терминологии Intel это называется CPUID leaf. CPUIDследует вызывать с EAX = 0first, так как это сохранит в регистре EAX наивысший параметр вызова EAX (leaf), который реализует CPU.

Для получения информации о расширенных функциях CPUIDследует вызывать с установленным старшим битом EAX. Для определения наивысшего параметра вызова расширенных функций вызовите CPUIDс EAX = 80000000h.

Листья CPUID больше 3, но меньше 80000000 доступны только тогда, когда регистры, специфичные для модели, имеют IA32_MISC_ENABLE.BOOT_NT4 [бит 22] = 0 (что по умолчанию). Как следует из названия, Windows NT 4.0 до SP6 не загружалась должным образом, если этот бит не был установлен, [6] но более поздним версиям Windows он не нужен, поэтому базовые листья больше 4 можно считать видимыми в текущих системах Windows. По состоянию на апрель 2024 года [update]базовые допустимые листья достигают 23h, но информация, возвращаемая некоторыми листьями, не раскрывается в общедоступной документации, т. е. они «зарезервированы».

Некоторые из недавно добавленных листьев также имеют подлистья, которые выбираются через регистр ECX перед вызовом CPUID.

EAX=0: наивысший функциональный параметр и идентификатор производителя

Это возвращает строку идентификатора производителя ЦП – двенадцатисимвольную строку ASCII, хранящуюся в EBX, EDX, ECX (в таком порядке). Самый высокий базовый параметр вызова (наибольшее значение, которое может быть установлено в EAX перед вызовом CPUID) возвращается в EAX.

Ниже приведен список процессоров и наивысшая реализованная функция.

Наивысший функциональный параметр
ПроцессорыБазовыйРасширенный
Ранее Intel 486CPUID не реализован
Более поздние Intel 486 и Pentium0x01Не реализовано
Pentium Pro , Pentium II и Celeron0x02Не реализовано
Пентиум III0x03Не реализовано
Пентиум 40x020x8000 0004
Xeon0x020x8000 0004
Пентиум М0x020x8000 0004
Pentium 4 с технологией Hyper-Threading0x050x8000 0008
Пентиум Д (8xx)0x050x8000 0008
Пентиум Д (9xx)0x060x8000 0008
Основной дуэт0x0A0x8000 0008
Core 2 Дуо0x0A0x8000 0008
Xeon 3000 , 5100, 5200, 5300, 5400 ( серия 5000 )0x0A0x8000 0008
Серия Core 2 Duo 80000x0D0x8000 0008
Xeon 5200, 5400 серии0x0A0x8000 0008
Атом0x0A0x8000 0008
Процессоры на базе Nehalem0x0B0x8000 0008
Процессоры на базе Ivy Bridge0x0D0x8000 0008
Процессоры на базе Skylake (базовая и максимальная частота процессора; опорная частота шины)0x160x8000 0008
Основной лист перечисления атрибутов поставщика систем на кристалле0x170x8000 0008
Процессоры на базе Meteor Lake0x230x8000 0008

Ниже приведены известные строки идентификаторов производителей процессоров:

Ниже приведены строки идентификаторов, используемые программными ядрами ЦП с открытым исходным кодом :

  • "GenuineAO486" – процессор ao486 (старый) [13] [14]
  • "MiSTer AO486" – Процессор ao486 (новый) [15] [14]
  • "GenuineIntel" – v586 core [16] (идентично строке Intel ID)

Ниже приведены известные строки идентификаторов виртуальных машин:

  • "MicrosoftXTA" – Microsoft x86-to-ARM [17]
  • "GenuineIntel" – Apple Розетта 2 [18]
  • "VirtualApple" – Новые версии Apple Rosetta 2
  • "PowerVM Lx86" – PowerVM Lx86 (эмулятор x86 для процессоров IBM POWER5 / POWER6 ) [19]
  • "Neko Project" – Neko Project II ( эмулятор PC-98 ) (используется, когда ЦП для эмуляции установлен на «Neko Processor II») [20] [21]

Например, на GenuineIntelпроцессоре значения, возвращаемые в EBX, равны 0x756e6547, EDX 0x49656e69и ECX равны 0x6c65746e. Следующий пример кода отображает строку идентификатора поставщика, а также наивысший параметр вызова, реализуемый ЦП.

.intel_syntax без префикса .текст.m0: .string "CPUID: %x\n"  .m1: .string "Наибольший номер реализованной базовой функции: %i\n"  .m2: .string "ID поставщика: %s\n"   .globl основной основной:нажмите r12 mov eax , 1  суб рсп , 16   cpuid леа рди , .m0 [ рип ]  mov esi , eax  вызов printfmov eax , 0   cpuidлеа рди , .m1 [ рип ]  mov esi , eax  mov r12d , edx  mov ebp , ecx  вызов printf mov 3 [ rsp ], ebx  леа рси , 3 [ rsp ]   леа рди , .м2 [ рип ]   mov 7 [ rsp ], r12d   mov 11 [ rsp ], ebp  вызов printfдобавить рсп , 16  поп р12 в отставке .section .note.GNU - стек , "" , @ progbits 

На некоторых процессорах можно изменить строку идентификатора производителя, сообщаемую CPUID.(EAX=0), записав новую строку идентификатора в определенные регистры MSR ( регистры, специфичные для модели ) с помощью WRMSRинструкции. Это использовалось на процессорах не Intel для включения функций и оптимизаций, которые были отключены в программном обеспечении для процессоров, не возвращающих GenuineIntelстроку идентификатора. [22] Процессоры, которые, как известно, обладают такими регистрами MSR, включают:

Процессоры с идентификатором производителя MSR
ПроцессорMSR-ы
IDT WinChip108h-109h[23]
ЧЕРЕЗ С3 , С71108h-1109h[24]
ВИА Нано1206h-1207h[25]
Transmeta Crusoe , Эффисон80860001h-80860003h[26] [27]
AMD Geode GX, LX3000h-3001h[28]
DM&P Vortex86 EX252444300h-52444301h[29]

EAX=1: Информация о процессоре и биты функций

Это возвращает степпинг , модель и информацию о семействе процессора в регистре EAX (также называемом сигнатурой процессора), флаги функций в регистрах EDX и ECX, а также дополнительную информацию о функциях в регистре EBX. [30]

CPUID EAX=1: Информация о версии процессора в EAX
ЕАХ
313029282726252423222120191817161514131211109876543210
СдержанныйРасширенный семейный идентификаторРасширенный идентификатор моделиСдержанныйТип процессораСемейный идентификаторМодельШаговый идентификатор
  • Stepping ID — это номер версии продукта, присвоенный в связи с исправлением ошибок или другими изменениями.
  • Фактическая модель процессора выводится из полей Model, Extended Model ID и Family ID. Если поле Family ID равно 6 или 15, модель равна сумме поля Extended Model ID, сдвинутого влево на 4 бита, и поля Model. В противном случае модель равна значению поля Model.
  • Фактическое семейство процессоров выводится из полей Family ID и Extended Family ID. Если поле Family ID равно 15, семейство равно сумме полей Extended Family ID и Family ID. В противном случае семейство равно значению поля Family ID.
  • Значение поля «Тип процессора» приведено в таблице ниже.
Тип процессора
ТипКодирование в двоичном формате
Производитель оригинального оборудования ( OEM ) Процессор00
Процессор Intel Overdrive01
Двойной процессор (применимо только к процессорам Intel P5 Pentium ) [31]10
Зарезервированное значение11

По состоянию на октябрь 2023 года известны следующие идентификаторы семейства процессоров x86: [32]

CPUID EAX=1: идентификаторы семейства процессоров
Семейный идентификатор +
Расширенный семейный идентификатор
ИнтелАМДДругой
0h
1h
2h
3h[а]
4h486486 , [33]
5x86 ,
Элан SC4xx/5xx [34]
Cyrix 5x86 , [35]
Cyrix MediaGX , [36]
UMC Green CPU , [4]
МЦСТ Эльбрус (большинство моделей), [10]
MiSTer ao486 [37]
5hПентиум ,
Пентиум MMX ,
Кварк X1000
К5 ,
К6
Cyrix 6x86 ,
Cyrix MediaGXm , [36]
Geode (кроме NX),
NexGen Nx586, [4]
IDT WinChip ,
IDT WinChip 2,
IDT WinChip 3,
Transmeta Crusoe ,
Rise mP6 ,
SiS 550,
DM&P Vortex86 (ранний), [38]
RDC IAD 100,
MCST Эльбрус-8С2 [10]
6hPentium Pro ,
Pentium II ,
Pentium III ,
Pentium M ,
Intel Core (все варианты),
Intel Atom (все варианты),
Xeon (кроме вариантов NetBurst ),
Xeon Phi (кроме KNC)
K7: Athlon ,
Athlon XP
Cyrix 6x86 MX/MII,
VIA C3 ,
VIA C7 ,
VIA Nano ,
DM&P Vortex86 (DX3,EX2 [39] ),
Zhaoxin ZX-A/B/C/C+,
( Centaur CNS [40] ),
МЦСТ Эльбрус-12С/16С/2С3 [10]
7hItanium
(в режиме IA-32)
Чжаосинь Кайсянь,
Чжаосинь Кайсэн
8h[б]
9h
0Ah
0BhКсеон Фи (Уголок рыцарей) [42]
0Ch
0Dh
0Eh
0FhNetBurst (Пентиум 4)K8/Hammer
( Athlon 64 )
Transmeta Efficeon
10hK10 : Феномен
11hItanium 2 [43]
(в режиме IA-32)
Турион X2
12hЛьяно
13hIntel Core (Panther Cove и выше) [44]
14hБобкэт
15hБульдозер ,
Копер ,
Паровой каток ,
Экскаватор
16hЯгуар ,
Пума
17hДзен 1 ,
Дзен 2
18hХигон Дхьяна
19hДзен 3 ,
Дзен 4
1AhДзен 5
  1. ^ Процессор i386 не поддерживает эту CPUIDинструкцию, однако он возвращает идентификатор семейства 3hв сбросе значения EDX.
  2. Сообщается, что идентификатор семейства намеренно не использовался для семейства процессоров Pentium 4 из-за несовместимости с Windows NT 4.0. [41]8h
CPUID EAX=1: Дополнительная информация в EBX
БитыEBXДействительный
7:0Индекс бренда
15:8CLFLUSHразмер строки (Значение * 8 = размер строки кэша в байтах)если CLFLUSHустановлен флаг функции.

CPUID.01.EDX.CLFSH [бит 19]= 1

23:16Максимальное количество адресуемых идентификаторов для логических процессоров в данном физическом корпусе;

Ближайшее целое число, являющееся степенью двойки, которое не меньше этого значения, представляет собой количество уникальных начальных идентификаторов APIC, зарезервированных для адресации различных логических процессоров в физическом корпусе. [a]

Прежнее использование: Количество логических процессоров на один физический процессор; два для процессора Pentium 4 с технологией Hyper-Threading. [47]

если установлен флаг функции Hyper-Threading .

CPUID.01.EDX.HTT [бит 28]= 1

31:24Локальный APIC ID: начальный APIC-ID используется для идентификации исполняющего логического процессора. [b]Pentium 4 и последующие процессоры.
  1. ^ На процессорах с более чем 128 логическими процессорами в одном корпусе (например, Intel Xeon Phi 7290 [45] и AMD Threadripper Pro 7995WX [46] ) значение в бите 23:16 устанавливается равным значению, не являющемуся степенью числа 2.
  2. ^ Локальный APIC ID также может быть идентифицирован через cpuid 0Bh leaf ( CPUID.0Bh.EDX[x2APIC-ID] ). На процессорах с более чем 256 логическими процессорами в одном корпусе (например, Xeon Phi 7290) необходимо использовать leaf 0Bh, поскольку APIC ID не помещается в 8 бит.

Информация о процессоре и флаги функций зависят от производителя, но обычно значения Intel используются другими производителями в целях совместимости.

CPUID EAX=1: Информация о функциях в EDX и ECX
КусочекEDXECX [а]Кусочек
КороткийОсобенностьКороткийОсобенность
0фпуВстроенный x87 FPUsse3SSE3 ( Новые инструкции Prescott - PNI)0
1вмэРасширения виртуального режима 8086 (такие как VIF, VIP, PVI)pclmulqdqPCLMULQDQ(инструкция по умножению без переноса)1
2деОтладка расширений ( CR4 бит 3)dtes6464-битное отладочное хранилище (edx бит 21)2
3псеРасширение размера страницы (страницы по 4 МБ)мониторMONITORи MWAITинструкции ( PNI )3
4тскСчетчик отметок времени и RDTSCинструкцияds-cplОтладочное хранилище, сертифицированное CPL4
5мсрРегистры и RDMSR/или WRMSRинструкции, специфичные для конкретной моделиvmxРасширения виртуальной машины5
6паэРасширение физического адресасмксРасширения безопасного режима ( LaGrande ) ( GETSECинструкция)6
7мсеИсключение проверки машиныстандартное восточное времяУлучшенный SpeedStep7
8cx8 [б]CMPXCHG8B( сравнить и поменять местами ) инструкциятм2Тепловой монитор 28
9апик [c]Встроенный усовершенствованный программируемый контроллер прерыванийссс3Дополнительные инструкции SSE39
10(мтрр) [д](сдержанный)cnxt-idКонтекстный идентификатор L110
11сеп [э]SYSENTERи SYSEXITбыстрые инструкции системного вызовасдбгИнтерфейс отладки Silicon11
12мтррТип памяти Диапазон Регистры [f]фмаСовмещенное умножение-сложение (FMA3)12
13стр.Страница Глобального Разрешения Бита в CR4cx16CMPXCHG16Bинструкция [г]13
14МКААрхитектура машинной проверкиxtprМожно отключить отправку сообщений о приоритете задач14
15смовУсловный ход: CMOVи FCMOVинструкции FCOMI[ h]пдкмВозможности мониторинга производительности и отладки15
16похлопатьТаблица атрибутов страницы(зарезервировано) [я]16
17псе-3636-битное расширение размера страницыpcidИдентификаторы контекста процесса ( CR4 бит 17)17
18пснСерийный номер процессора поддерживается и включен [j]дкаПрямой доступ к кэшу для записи DMA [58] [59]18
19клфшCLFLUSHинструкция очистки строки кэша ( SSE2 )sse4.1Инструкции SSE4.119
20(нх)Бит запрета выполнения (NX) ( только для Itanium , зарезервирован для других процессоров) [60] [k]sse4.2Инструкции SSE4.220
21дсОтладочное хранилище: сохранение трассировки выполненных прыжковx2apicx2APIC (улучшенный APIC)21
22acpiБортовые терморегуляторы MSR для ACPImovbeMOVBEинструкция ( big-endian )22
23ммксИнструкции MMX (64-бит SIMD)попкнтPOPCNTинструкция23
24fxsrFXSAVE, FXRSTORинструкции, CR4 бит 9tsc-deadlineAPIC реализует одноразовую операцию с использованием значения крайнего срока TSC24
25ссэИнструкции потокового SIMD Extensions (SSE)
(также известные как « Katmai New Instructions»; 128-битный SIMD)
aes-niНабор инструкций AES25
26sse2Инструкции SSE2xсохранитьСохранение/восстановление состояния расширяемого процессора:
XSAVE, XRSTOR, XSETBV, XGETBVинструкции
26
27SSКэш ЦП реализует самонаблюдениеosxсохранитьXSAVEвключено ОС27
28хттЗарезервированное поле «Макс. идентификаторы APIC» действительно [l]avxРасширенные векторные расширения (256-бит SIMD)28
29тмТепловой монитор автоматически ограничивает температуруф16сИнструкции по преобразованию чисел с плавающей точкой в ​​формат FP16 и обратно29
30ia64Процессор IA64 , эмулирующий x86 [60]рдрндRDRAND(генератор случайных чисел на кристалле)30
31пбэВозможность пробуждения при включении Pending Break (контакт PBE#)гипервизорГипервизор присутствует (всегда ноль на физических процессорах) [63] [64] [65]31
  1. ^ На некоторых старых процессорах выполнение CPUIDс листовым индексом (EAX) больше 0 может оставить EBX и ECX неизмененными, сохранив их старые значения. По этой причине рекомендуется обнулить EBX и ECX перед выполнением CPUIDс листовым индексом 1.

    К процессорам, демонстрирующим подобное поведение, относятся Cyrix MII [48] и IDT WinChip 2. [49]

  2. ^ На процессорах от IDT, Transmeta и Rise (идентификаторы поставщиков CentaurHauls, GenuineTMx86и RiseRiseRise) CMPXCHG8Bинструкция всегда поддерживается, однако бит функции для инструкции может быть не установлен. Это обходной путь для ошибки в Windows NT. [50]
  3. ^ Только на ранних процессорах AMD K5 ( AuthenticAMDFamily 5 Model 0) бит 9 EDX использовался для указания поддержки PGE. Он был перемещен в бит 13, начиная с K5 Model 1. [51]
  4. ^ Intel AP-485, версии 006 [52] по 008, перечисляет CPUID.(EAX=1):EDX[бит 10] как имеющий имя «MTRR» (хотя и описанный как «Зарезервированный»/«Не рассчитывайте на их значение») — это имя было удалено в более поздних версиях AP-485, и с тех пор бит был указан как зарезервированный без имени.
  5. ^ Только на процессорах Pentium Pro ( GenuineIntelсемейство 6, модель 1) бит 11 EDX недействителен — бит установлен, но инструкции SYSENTERи SYSEXITне поддерживаются на Pentium Pro. [53]
  6. ^ Для MTRR дополнительная информация о функциях не доступна через CPUID, а вместо этого через MTRRCAPMSR только для чтения (MSR 0FEh). Этот MSR имеет следующую структуру:
    БитыИспользование
    7:0Количество MTRR с переменным диапазоном
    8Поддерживаются MTRR с фиксированным диапазоном
    9(Сдержанный)
    10Поддерживаемый тип памяти Write-Combining
    11Поддерживается SMRR (регистр диапазона системного управления)
    12Поддерживается PRMRR (регистр диапазона зарезервированной памяти процессора, часть SGX )
    13Поддерживается SMRR2 [54]
    14Поддерживается SMRR-блокировка
    15Поддерживается SEAMRR (регистр диапазона безопасного арбитражного режима, часть TDX ) [55]
    63:16(Сдержанный)
  7. ^ Некоторые очень ранние процессоры Intel 64 имеют CMPXCHG16Bустановленный бит функции, даже если они не поддерживают эту инструкцию — это применимо только к чипам GenuineIntelсемейства 0FhModel 3 Stepping 4 (90 нм Pentium 4). [56]
  8. ^ FCMOV и FCOMIинструкции доступны только при наличии встроенного x87 FPU (обозначается битом 0 EDX).
  9. ^ Бит ECX 16 указан как "Зарезервированный" в общедоступной документации Intel и AMD и не установлен ни в одном известном процессоре. Однако сообщается, что некоторые версии ядра Windows Vista проверяют этот бит [57] - если он установлен, Vista распознает его как функцию "каналов процессора".
  10. ^ На процессорах Intel и Transmeta [26] , которые поддерживают PSN (серийный номер процессора), PSN можно отключить, установив бит 21 MSR 119h( BBL_CR_CTL) в 1. Это приведет к удалению листа 3 и заставит CPUID.(EAX=1):EDX[бит 18] вернуть 0.
  11. ^ На процессорах x86, отличных от Itanium, поддержка бита No-execute указана в CPUID.(EAX=8000_0001):EDX[bit 20] вместо этого.
  12. ^ EDX бит 28, если установлен, указывает, что биты 23:16 CPUID.(EAX=1):EBX действительны. Если этот бит не установлен, то пакет CPU содержит только 1 логический процессор.

    В более старой документации этот бит часто указывается как флаг « технологии Hyper-Threading » [61] — однако, хотя этот флаг является необходимым условием для поддержки Hyper-Threading, он сам по себе не указывает на поддержку Hyper-Threading и был установлен на многих процессорах, которые не поддерживают какую-либо форму многопоточной технологии. [62]

Зарезервированные поля следует маскировать перед их использованием для идентификации процессора.

EAX=2: Информация о кэше и дескрипторе TLB

Возвращает список дескрипторов, указывающих возможности кэша и TLB в регистрах EAX, EBX, ECX и EDX.

На процессорах, которые поддерживают этот лист, вызов CPUIDс EAX=2 приведет к тому, что нижний байт EAX будет установлен в 01h[a] , а оставшиеся 15 байт EAX/EBX/ECX/EDX будут заполнены 15 дескрипторами, по одному байту каждый. Эти дескрипторы предоставляют информацию о кэшах процессора, TLB и предварительной выборке. Обычно это один кэш или TLB на дескриптор, но некоторые значения дескрипторов предоставляют и другую информацию - в частности, 00hиспользуется для пустого дескриптора, FFhуказывает, что лист не содержит допустимой информации кэша и что вместо него следует использовать лист 4h, и FEhуказывает, что лист не содержит допустимой информации TLB и что вместо него следует использовать лист 18h. Дескрипторы могут появляться в любом порядке.

Для каждого из четырех регистров (EAX, EBX, ECX, EDX), если установлен бит 31, то регистр не следует считать содержащим допустимые дескрипторы (например, на Itanium в режиме IA-32 CPUID(EAX=2) возвращается 80000000hв EDX — это следует интерпретировать как то, что EDX не содержит допустимой информации, а не то, что он содержит дескриптор для кэша L2 объемом 512 КБ.)

В таблице ниже для известных значений дескриптора приводится сжатое описание кэша или TLB, указанного этим значением дескриптора (или другая информация, где это применимо). Суффиксы, используемые в таблице:

  • K,M,G: двоичный килобайт, мегабайт, гигабайт (емкость кэшей, размер страницы для TLB)
  • E: записи (для TLB; например, 64E = 64 записи)
  • p: размер страницы (например, 4Kp для TLB, где каждая запись описывает одну страницу размером 4 КБ , 4K/2Mp для TLB, где каждая запись может описывать либо одну страницу размером 4 КБ, либо одну огромную страницу размером 2 МБ)
  • L: размер строки кэша (например, 32L = размер строки кэша 32 байта)
  • S: размер сектора кэша (например, 2S означает, что кэш использует сектора по 2 строки кэша в каждом)
  • A: ассоциативность (например, 6A = 6-канальная ассоциативность , FA = полностью ассоциативная)
Легенда для кодировок байтов дескриптора кэша/TLB

Кэш инструкций
или данных уровня 1

Кэш 2-го уровня

Кэш 3-го уровня
Инструкция
или данные TLB
Уровень 2
общий
TLB
Другая
информация
(сдержанный)
CPUID EAX=2: Кодировки байтов дескриптора кэша/TLB
х0х1х2х3х4х5х6х7х8х9хАхБхСхДхЭхФ
0xнулевой
дескриптор
ITLB: 32E,
4Kp, 4A
ITLB: 2E,
4Mp, FA
DTLB: 64E,
4Kp, 4A
DTLB: 8E,
4Mp, 4A
DTLB: 32E,
4Mp, 4A
L1I: 8К,
4А, 32Л
0xL1I: 16К,
4А, 32Л
L1I: 32К,
4А, 64Л
L1D: 8К,
2А, 32Л
ITLB: 4E,
4Mp, FA
L1D: 16К,
4А, 32Л
L1D: 16К,
4А, 64Л [б]
L1D: 24К,
6А, 64Л [б]
0x
1x(L1D: 16K,
4A, 32L) [c]
(L1I: 16K,
4A, 32L) [c]
1x(L2C: 96K,
6A, 64L) [c]
L2C: 128К,
2А, 64Л
1x
2xL2C: 256К,
8А, 64Л [г]
L3C: 512К,
4А, 64Л, 2С
L3C: 1М,
8А, 64Л, 2С
L2C: 1М,
16А, 64Л
L3C: 2М,
8А, 64Л, 2С
(128-байтовая
предварительная выборка) [e]
(128-байтовая
предварительная выборка) [e]
2x(128-байтовая
предварительная выборка) [e]
L3C: 4М,
8А, 64Л, 2С
L1D: 32К,
8А, 64Л
2x
3xL1I: 32К,
8А, 64Л
3xL2C: 128K,
4A, 64L, 2S [ж]
L2C: 192К,
6А, 64Л, 2С [ж]
L2C: 128K,
2A, 64L, 2S [ж]
L2C: 256К,
4А, 64Л, 2С [ж]
L2C: 384K,
6A, 64L, 2S [ж]
L2C: 512K,
4A, 64L, 2S [ж]
L2C: 256К,
2А, 64Л [г]
3x
4xкэш L3
отсутствует
L2C: 128К,
4А, 32Л
L2C: 256K,
4A, 32L [ч]
L2C: 512К,
4А, 32Л
L2C: 1M,
4A, 32L
L2C: 2М,
4А, 32Л
L3C: 4М,
4А, 64Л
L3C: 8М,
8А, 64Л
4xL2C: 3М,
12А, 64Л
L2C/L3C: [я]
4M, 16A, 64L
L3C: 6М,
12А, 64Л
L3C: 8М,
16А, 64Л
L3C: 12М,
12А, 64Л
L3C: 16М,
16А, 64Л
L2C: 6М,
24А, 64Л
ITLB: 32E,
4Kp [j]
4x
5xITLB: 64E,FA,
4K/2M/4Mp
ITLB: 128E,FA,
4K/2M/4Mp
ITLB: 256E,FA,
4K/2M/4Mp
ITLB: 7E,
2M/4Mp, FA
DTLB: 16E,
4Mp, 4A
DTLB: 16E,
4Kp, 4A
5xДТЛБ: 16E,
4Kp, FA
DTLB: 32E,
2M/4Mp, 4A
DTLB: 64E
4K/4Mp, FA
DTLB: 128E,
4K/4Mp, FA
DTLB: 256E,
4K/4Mp, FA
5x
6xL1D: 16К,
8А, 64Л
ITLB: 48E,
4Kp, FA
Два DTLB:
32E, 2M/4Mp, 4A
+ 4E, 1Gp, FA
DTLB: 512E,
4Kp, 4A
L1D: 8К,
4А, 64Л
L1D: 16К,
4А, 64Л
6xL1D: 32К,
4А, 64Л
DTLB: 64E,
4Kp, 8A
DTLB: 256E,
4Kp, 8A
DTLB: 128E,
2M/4Mp, 8A
DTLB: 16E,
1Gp, FA
6x
7xКэш трассировки ,
12K-μop, 8A [k]
Кэш трассировки,
16K-μop, 8A
Кэш трассировки,
32K-μop, 8A
Кэш трассировки,
64K-μop, 8A [f]
[час]ITLB: 8E,
2M/4Mp, FA [л]
(L1I: 16K,
4A, 64L) [м] [ч]
7xL2C: 1M,
4A, 64L
L2C: 128К,
8А, 64Л, 2С
L2C: 256К,
8А, 64Л, 2С
L2C: 512К,
8А, 64Л, 2С
L2C: 1M,
8A, 64L, 2S
L2C: 2М,
8А, 64Л
(L2C: 256K,
8A, 128L) [м]
L2C: 512К,
2А, 64Л
7x
8xL2C: 512К,
8А, 64Л [к]
(L2C: 128K,
8A, 32L) [э]
L2C: 256K,
8A, 32L [ч]
L2C: 512К,
8А, 32Л
L2C: 1M,
8A, 32L
L2C: 2М,
8А, 32Л
L2C: 512К,
4А, 64Л
L2C: 1M,
8A, 64L
8x(L3C: 2M,
4A, 64L) [c]
(L3C: 4M,
4A, 64L) [c]
(L3C: 8M,
4A, 64L) [c]
(L3C: 3M,
12A, 128L) [м] [н]
8x
9x(ITLB: 64E,FA,
4K-256Mp) [c]
(DTLB: 32E,FA,
4K-256Mp) [c]
9x(DTLB: 96E,FA,
4K-256Mp) [c]
9x
ТопорДТЛБ: 32E,
4Kp, FA
ТопорТопор
ВхITLB: 128E,
4Kp, 4A
ITLB: 8E,
2M/4Mp, 4A [o]
ITLB: 64E,
4Kp, 4A
DTLB: 128E,
4Kp, 4A
DTLB: 256E,
4Kp, 4A
ITLB: 64E,
4Kp, 8A
ITLB: 128E,
4Kp, 8A
ВхDTLB: 64E,
4Kp, 4A
Вх
СхDTLB: 8E,
4K/4Mp, 4A
L2TLB: 1024E,
4K/2Mp, 8A
DTLB: 16E,
2M/4Mp, 4A [83]
Два L2 STLB:
1536E, 4K/2Mp, 6A [p]
+ 16E, 1Gp, 4A
DTLB: 32E,
2M/4Mp, 4A
СхL2TLB: 512E,
4Kp, 4A
Сх
ДксL3C: 512К,
4А, 64Л
L3C: 1М,
4А, 64Л
L3C: 2М,
4А, 64Л
L3C: 1М,
8А, 64Л
L3C: 2М,
8А, 64Л
ДксL3C: 4М,
8А, 64Л
L3C: 1,5M,
12A, 64L
L3C: 3М,
12А, 64Л
L3C: 6М,
12А, 64Л
Дкс
БывшийL3C: 2М,
16А, 64Л
L3C: 4М,
16А, 64Л
L3C: 8М,
16А, 64Л
БывшийL3C: 12М,
24А, 64Л
L3C: 18M,
24A, 64L [86]
L3C: 24М,
24А, 64Л
Бывший
Фх64-байтовая
предварительная выборка [q]
128-байтовая
предварительная выборка [q]
ФхЛист 2
не имеет информации о TLB,
используйте лист 18h
Лист 2
не имеет кэш-информации,
используйте лист 4
Фх
х0х1х2х3х4х5х6х7х8х9хАхБхСхДхЭхФ
  1. ^ В более старой документации Intel нижний байт возвращаемого в EAX значения описывается как указывающий количество раз, которое CPUIDдолжен быть вызван с EAX=2, чтобы получить все дескрипторы кэша/TLB. Однако все известные процессоры, реализующие этот лист, возвращают 01hэтот байт, а более новая документация Intel (SDM rev 053 [66] и более поздние) определяет этот байт как имеющий значение 01h.
  2. ^ ab Для дескрипторов 0Dhи 0Eh, Intel AP-485 rev 37 [67] перечисляет кэши, которые они описывают как имеющие ECC - это было удалено в rev 38 и более поздних документах Intel.
  3. ^ abcdefghi Дескрипторы 10h, 15h, 1Ah, 88h, 89h, 8Ah, 90h, 96h, 9Bhдокументированы только для режима работы IA-32 процессора Itanium . [68]
  4. ^ Кэш, описываемый дескриптором, 21hв некоторых местах (например, AP-485 rev 36 [69] , но не rev 37) называется «MLC» (кэш среднего уровня).
  5. ^ abcd Значения дескрипторов 26h, 27h, 28hи 81hне указаны в документации Intel и не используются ни в одном из известных выпущенных процессоров. ( 81hбыл замечен в инженерных образцах отмененного Intel Timna . [79] ) Тем не менее, сообщалось, что они распознаются ядром Windows NT v5.1 ( Windows XP ) и выше. 81hтакже распознается v5.0 ( Windows 2000 ). [80]
  6. ^ abcdefg Дескрипторы 39h-3Ehи 73hперечислены в версии 36 Intel AP-485, [69], но были удалены из более поздней документации Intel, хотя некоторые из них использовались в процессорах Intel (в основном в процессорах Celeron на базе Netburst39h , например, в «Willamette-128» , [70], 3Bh в «Northwood-128», [71] и 3Chв «Prescott-256» [72] ).
  7. ^ По состоянию на ноябрь 2024 года дескриптор 3Fhне указан ни в одной известной документации Intel — тем не менее он используется в процессорах Intel Tolapai [73] и указан в предоставленном Intel патче ядра Linux. [74]
  8. ^ abcd Документация по процессору VIA Cyrix III "Joshua" ( CyrixInsteadсемейство 6, модель 5) указывает, что этот процессор использует значения дескрипторов 74hи 77hдля своих TLB, а также значения 42hи 82hдля своих кэшей, но не указывает, каким кэшам/TLB в процессоре соответствует каждое из этих значений дескрипторов. [75]
  9. ^ Дескриптор 49hуказывает на кэш-память 3-го уровня на GenuineIntelпроцессорах семейства 0Fh Model 6 (Xeon на базе Pentium 4) и кэш-память 2-го уровня на других процессорах.
  10. ^ В документации Intel CPUID не указана ассоциативность ITLB, указанная дескриптором 4Fh. Процессоры, использующие этот дескриптор (Intel Atom "Bonnell" [76] ), в другом месте описаны как имеющие полностью ассоциативный 32-записный ITLB. [77]
  11. ^ ab В процессорах Cyrix и Geode (идентификаторы поставщика CyrixInsteadи Geode by NSC) дескрипторы 70hи 80hимеют разное значение: [78]
    • Дескриптор 70hуказывает на 32-записную общую 4-канальную ассоциативную буферную иерархию инструкций и данных с размером страницы 4 КБ.
    • Дескриптор 80hуказывает на общий кэш L1 для инструкций и данных объемом 16 КБ с 4-канальной ассоциативностью и размером строки кэша 16 байт.
  12. ^ Дескриптор 76hуказан как кэш L2 объемом 1 МБ в версии 37 Intel AP-485 [67], но как инструкция TLB в версии 38 и всей более поздней документации Intel.
  13. ^ abc Дескрипторы 77h, 7Eh, 8Dhдокументированы только для режима работы IA-32 Itanium 2. [81]
  14. ^ В режиме работы IA-32 процессора Itanium 2 размер кэша L3 всегда указывается как 3 МБ независимо от фактического размера кэша. [82]
  15. ^ Для дескриптора B1hемкость TLB составляет 8 элементов при использовании страниц по 2 МБ, но уменьшается до 4 элементов при использовании страниц по 4 МБ.
  16. ^ Для дескриптора C3hмногие процессоры Intel, использующие этот дескриптор, имеют L2 TLB, который является 12-канальным наборно-ассоциативным, а не 6-канальным наборно-ассоциативным. Это применимо по крайней мере к процессорам Skylake [84] и Whiskey/Kaby/Coffee/Comet Lake [85] .
  17. ^ ab Предварительная выборка, указанная дескрипторами F0h, F1hявляется рекомендуемым шагом для предварительной выборки памяти с помощью PREFETCHNTAинструкции. [87]

EAX=3: Серийный номер процессора

Это возвращает серийный номер процессора. Серийный номер процессора был введен в Intel Pentium III , но из-за проблем с конфиденциальностью эта функция больше не реализована в более поздних моделях (бит функции PSN всегда очищен). Процессоры Transmeta Efficeon и Crusoe также поддерживают эту функцию. Однако процессоры AMD не реализуют эту функцию ни в одной из моделей процессоров.

Для процессоров Intel Pentium III серийный номер возвращается в регистрах EDX:ECX. Для процессоров Transmeta Efficeon он возвращается в регистрах EBX:EAX. А для процессоров Transmeta Crusoe он возвращается только в регистре EBX.

Обратите внимание, что для работы функции серийного номера процессора необходимо включить ее в настройках BIOS .


EAX=4 и EAX=8000'001Dh: иерархия и топология кэша

Эти два листа используются для предоставления информации об уровнях иерархии кэша , доступных ядру процессора, на котором CPUIDвыполняется инструкция. Лист 4используется на процессорах Intel, а лист 8000'001Dhиспользуется на процессорах AMD — они оба возвращают данные в EAX, EBX, ECX и EDX, используя тот же формат данных, за исключением того, что лист 4возвращает несколько дополнительных полей, которые считаются «зарезервированными» для листа 8000'001Dh. Они оба предоставляют информацию о кэше ЦП в серии подлистов, выбранных ECX — чтобы получить информацию обо всех уровнях кэша, необходимо вызывать CPUIDмногократно, с EAX= 4или 8000'001Dhи ECX, установленными на увеличивающиеся значения, начиная с 0 (0,1,2,...), пока не будет найден подлист, не описывающий никаких кэшей (EAX[4:0]=0). Подлисты, которые возвращают информацию о кэше, могут появляться в любом порядке, но все они появятся перед первым подлистом, не описывающим никаких кэшей.

В таблице ниже поля, определенные для листа 4, но не для листа, 8000'001Dhвыделены желтым цветом ячеек и элементом (#4) .

CPUID EAX=4 и 8000'001Dh: кэшировать информацию о свойствах в EAX, EBX и EDX
КусочекЕАХEBXEDX [а]Кусочек
0Тип кэша:
  • 0: (Больше нет кэшей)
  • 1: Кэш данных
  • 2: Кэш инструкций
  • 3: Единый кэш
  • 4-31: (зарезервировано)
Размер строки когерентности системы в байтах, минус 1WBINVDОбласть действия для аннулирования кэша.
Значение 0 указывает, что инструкции INVD/ WBINVDаннулируют все кэши нижних уровней этого кэша, включая кэши, принадлежащие процессорам-братьям, разделяющим этот кэш. Значение 1 указывает, что кэши нижних уровней процессоров-братьев, разделяющих этот кэш, не обязательно будут очищены.
0
1Инклюзивность кэша. Если 1, то кэш включает кэши более низкого уровня.1
2Сложная индексация кэша. Если 1, то кэш использует сложную функцию для индексации кэша, в противном случае кэш напрямую отображается. (#4)2
3(сдержанный)3
4(сдержанный)4
7:5Уровень кэша (начиная с 1)(сдержанный)7:5
8Самоинициализирующийся уровень кэша (1=не требует программной инициализации после сброса)(сдержанный)8
9Полностью ассоциативный кэш(сдержанный)9
10( WBINVDобласть выполнения аннулирования кэша) [b] (#4)(сдержанный)10
11(Инклюзивность кэша) [b] (#4)(сдержанный)11
13:12(сдержанный)Физические разделы строк (количество строк кэша, имеющих общий тег адреса кэша), минус 1(сдержанный)13:12
21:14Максимальное количество адресуемых идентификаторов для логических процессоров, разделяющих этот кэш, минус 1(сдержанный)21:14
25:22Способы ассоциативности кэша , минус 1(сдержанный)25:22
31:26Максимальное количество адресуемых идентификаторов для ядер процессора в физическом корпусе, минус 1 (#4)(сдержанный)31:26
  1. ^ Intel AP-485, версии 31 [88] и 32, перечисляет биты 9:0 EDX как поле «Prefetch Stride» — это было удалено в версии 33 и всей более поздней документации Intel, и неизвестно ни об одном процессоре, который бы использовал EDX таким образом.
  2. ^ ab Для CPUID leaf 4 биты 11:10 EAX документированы только для процессора Xeon Phi "Knights Corner" ( GenuineIntelсемейство 0Bh). [42] Для других процессоров вместо этого следует использовать биты 1:0 EDX.

Для любых допустимых и не полностью ассоциативных кэшей возвращаемое в ECX значение равно числу наборов в кэше минус 1. (Для полностью ассоциативных кэшей ECX следует рассматривать так, как если бы он возвращал значение 0.) Для любого заданного кэша, описанного подлистом листа CPUIDили 4, 8000'001Dhобщий размер кэша в байтах можно вычислить следующим образом:

CacheSize = (EBX[11:0]+1) * (EBX[21:12]+1) * (EBX[31:22]+1) * (ECX+1)

Например, на процессорах Intel Crystalwell выполнение CPUID с EAX=4 и ECX=4 приведет к тому, что процессор вернет следующую информацию о размере кэша уровня 4 в EBX и ECX: EBX=03C0F03Fи ECX=00001FFF- это следует понимать так, что этот кэш имеет размер строки кэша 64 байта (EBX[11:0]+1), имеет 16 строк кэша на тег (EBX[21:12]+1), является 16-канальным наборно-ассоциативным (EBX[31:22]+1) с 8192 наборами (ECX+1), что составляет общий размер 64*16*16*8192=134217728 байт или 128 двоичных мегабайт.

EAX=4 и EAX=Bh: топология Intel Thread/Core и Cache

Эти два листа используются для топологии процессора (поток, ядро, пакет) и перечисления иерархии кэша в многоядерных (и гиперпоточных) процессорах Intel. [89] По состоянию на 2013 год [update]AMD не использует эти листья, но имеет альтернативные способы перечисления ядер. [90]

В отличие от большинства других листьев CPUID, лист Bh будет возвращать разные значения в EDX в зависимости от того, на каком логическом процессоре выполняется инструкция CPUID; возвращаемое в EDX значение на самом деле является идентификатором x2APIC логического процессора. Однако пространство идентификаторов x2APIC не отображается непрерывно на логические процессоры; в отображении могут быть пробелы, что означает, что некоторые промежуточные идентификаторы x2APIC не обязательно соответствуют какому-либо логическому процессору. Дополнительная информация для отображения идентификаторов x2APIC на ядра предоставляется в других регистрах. Хотя лист Bh имеет подлистья (выбираемые ECX, как описано ниже), возвращаемое в EDX значение зависит только от логического процессора, на котором выполняется инструкция, но не от подлистья.

Топология процессора(ов), представленная листом Bh, является иерархической, но со странной оговоркой, что порядок (логических) уровней в этой иерархии не обязательно соответствует порядку в физической иерархии ( SMT /core/package). Однако каждый логический уровень может быть запрошен как подлист ECX (листа Bh) для его соответствия «типу уровня», который может быть либо SMT, ядром, либо «недействительным». Пространство идентификаторов уровня начинается с 0 и является непрерывным, что означает, что если идентификатор уровня недействителен, все идентификаторы более высоких уровней также будут недействительными. Тип уровня возвращается в битах 15:08 ECX, в то время как количество логических процессоров на запрашиваемом уровне возвращается в EBX. Наконец, связь между этими уровнями и идентификаторами x2APIC возвращается в EAX[4:0] как количество бит, на которое идентификатор x2APIC должен быть сдвинут, чтобы получить уникальный идентификатор на следующем уровне.

Например, двухъядерный процессор Westmere , способный поддерживать гиперпоточность (имеющий два ядра и четыре потока в общей сложности), может иметь идентификаторы x2APIC 0, 1, 4 и 5 для своих четырех логических процессоров. Лист Bh (=EAX), подлист 0 (=ECX) CPUID может, например, возвращать 100h в ECX, что означает, что уровень 0 описывает уровень SMT (гиперпоточность), и возвращать 2 в EBX, поскольку на каждое физическое ядро ​​приходится два логических процессора (единицы SMT). Значение, возвращаемое в EAX для этого 0-подлиста, в этом случае должно быть 1, поскольку сдвиг вышеупомянутых идентификаторов x2APIC вправо на один бит дает уникальный номер ядра (на следующем уровне иерархии идентификаторов уровня) и стирает бит идентификатора SMT внутри каждого ядра. Более простой способ интерпретации этой информации заключается в том, что последний бит (бит номер 0) идентификатора x2APIC идентифицирует блок SMT/hyperthreading внутри каждого ядра в нашем примере. Переход к подлисту 1 (путем выполнения другого вызова CPUID с EAX=Bh и ECX=1) может, например, вернуть 201h в ECX, что означает, что это уровень типа ядра, и 4 в EBX, поскольку в пакете 4 логических процессора; возвращаемый EAX может быть любым значением больше 3, поскольку так получается, что бит номер 2 используется для идентификации ядра в идентификаторе x2APIC. Обратите внимание, что бит номер 1 идентификатора x2APIC в этом примере не используется. Однако возвращаемый EAX на этом уровне вполне может быть 4 (и так оно и есть на Clarkdale Core i3 5x0), поскольку это также дает уникальный идентификатор на уровне пакета (очевидно, = 0) при сдвиге идентификатора x2APIC на 4 бита. Наконец, вы можете задаться вопросом, что может нам рассказать лист EAX=4, чего мы еще не узнали. В EAX[31:26] он возвращает биты маски APIC, зарезервированные для пакета; в нашем примере это будет 111b, поскольку биты с 0 по 2 используются для идентификации логических процессоров внутри этого пакета, но бит 1 также зарезервирован, хотя и не используется как часть схемы идентификации логического процессора. Другими словами, идентификаторы APIC с 0 по 7 зарезервированы для пакета, хотя половина этих значений не сопоставляется с логическим процессором.

Иерархия кэша процессора исследуется путем рассмотрения подлистьев листа 4. Идентификаторы APIC также используются в этой иерархии для передачи информации о том, как различные уровни кэша совместно используются блоками SMT и ядрами. Продолжая наш пример, кэш L2, который совместно используется блоками SMT одного и того же ядра, но не между физическими ядрами на Westmere, обозначается установкой EAX[26:14] в 1, в то время как информация о том, что кэш L3 совместно используется всем пакетом, обозначается установкой этих битов в (по крайней мере) 111b. Подробности кэша, включая тип кэша, размер и ассоциативность, передаются через другие регистры на листе 4.

Остерегайтесь, что более старые версии Intel app note 485 содержат некоторую вводящую в заблуждение информацию, особенно в отношении идентификации и подсчета ядер в многоядерном процессоре; [91] ошибки от неправильной интерпретации этой информации были даже включены в пример кода Microsoft для использования CPUID, даже для издания Visual Studio 2013 года, [92] а также на странице sandpile.org для CPUID, [93] но пример кода Intel для идентификации топологии процессора [89] имеет правильную интерпретацию, а текущее Руководство разработчика программного обеспечения Intel имеет более понятный язык. (Открытый исходный код) кроссплатформенного производственного кода [94] от Wildfire Games также реализует правильную интерпретацию документации Intel.

Примеры определения топологии, включающие старые (до 2010 года) процессоры Intel, в которых отсутствует x2APIC (и, следовательно, не реализован лист EAX=Bh), приведены в презентации Intel 2010 года. [95] Помните, что использование этого старого метода определения на процессорах Intel 2010 года и более новых может переоценить количество ядер и логических процессоров, поскольку старый метод определения предполагает, что в пространстве идентификаторов APIC нет пробелов, и это предположение нарушается некоторыми новыми процессорами (начиная с серии Core i3 5x0), но эти новые процессоры также поставляются с x2APIC, поэтому их топологию можно правильно определить с помощью метода листа EAX=Bh.

EAX=5: Функции MONITOR/MWAIT

Возвращает информацию о функциях, связанных с инструкциями MONITORи MWAITв регистрах EAX, EBX, ECX и EDX.

CPUID EAX=5: информация о функции MONITOR/MWAIT в EAX, EBX, EDX
КусочекЕАХEBXEDXКусочек
3:0Наименьший размер строки монитора в байтахНаибольший размер строки монитора в байтахКоличество поддерживаемых подсостояний C0 [a]MWAIT3:0
7:4Количество поддерживаемых подсостояний C1MWAIT7:4
11:8Количество поддерживаемых подсостояний C2MWAIT11:8
15:12Количество поддерживаемых подсостояний C3MWAIT15:12
19:16(сдержанный)(сдержанный)Количество поддерживаемых подсостояний C4MWAIT19:16
23:20Количество поддерживаемых подсостояний C5MWAIT23:20
27:24Количество поддерживаемых подсостояний C6MWAIT27:24
31:28Количество поддерживаемых подсостояний C7MWAIT31:28
  1. ^ Состояния C0–C7 являются специфичными для процессора C-состояниями, которые не обязательно соответствуют 1:1 C-состояниям ACPI .
CPUID EAX=5: перечисление расширений MONITOR/MWAIT в ECX
КусочекЕкб
КороткийОсобенность
0ЕМХПеречисление расширений MONITOR/MWAIT в ECX и EDX поддерживается
1МБППоддерживает обработку прерываний как событий останова, MWAITдаже если прерывания отключены.
2(сдержанный)
3Безмониторный_MWAITРазрешить MWAITиспользовать для управления питанием без настройки мониторинга памяти с помощью MONITOR[96]

31:4
 
(сдержанный)

EAX=6: Управление температурой и питанием

Это возвращает биты функций в регистре EAX и дополнительную информацию в регистрах EBX, ECX и EDX.

CPUID EAX=6: биты функций управления температурой/питанием в EAX
КусочекЕАХ
КороткийОсобенность
0ДТСВозможности цифрового термодатчика
1Возможности технологии Intel Turbo Boost
2АРАТ [а]Возможность использования постоянно работающего таймера APIC
3(сдержанный)
4польских злотыхВозможность уведомления об ограничении мощности
5ECMDВозможность расширенной модуляции тактовой частоты
6ПТМВозможность управления температурой упаковки
7HWPАппаратно-управляемые состояния производительности . Добавлены MSR:
  • IA32_PM_ENABLE( 770h)
  • IA32_HWP_CAPABILITIES( 771h)
  • IA32_HWP_REQUEST( 774h)
  • IA32_HWP_STATUS(777h
8HWP_УведомлениеУведомление HWP об изменении динамической гарантированной производительности - IA32_HWP_INTERRUPT( 773h) MSR
9HWP_Activity_WindowУправление окном активности HWP - биты 41:32 IA32_HWP_REQUESTMSR
10HWP_Энергоэффективность_ПредпочтениеHWP Управление предпочтениями в области энергии/производительности - биты 31:24 IA32_HWP_REQUESTMSR
11HWP_Package_Level_RequestHWP Контроль на уровне пакетов - IA32_HWP_REQUEST_PKG( 772h) MSR
12(сдержанный)
13HDCПоддерживается аппаратный режим Duty Cycling . Добавлены MSR:
  • IA32_PKG_HDC_CTL( DB0h)
  • IA32_PM_CTL1( DB1h)
  • IA32_THREAD_STALL( DB2h)
14Доступна технология Intel Turbo Boost Max 3.0
15Поддерживаются прерывания при изменении IA32_HWP_CAPABILITIES.Highest_Performance (биты 7:0)
16Поддерживается переопределение HWP PECI - биты 63:60 IA32_HWP_PECI_REQUEST_INFO( 775h) MSR
17Гибкий HWP - биты 63:59 IA32_HWP_REQUESTMSR
18Режим быстрого доступаПоддерживается режим быстрого доступа для IA32_HWP_REQUESTMSR [b]
19HW_FEEDBACKИнтерфейс обратной связи оборудования. Добавлены MSR:
  • IA32_HW_FEEDBACK_PTR( 17D0h)
  • IA32_HW_FEEDBACK_CONFIG( 17D1h) (бит 0 включает HFI, бит 1 включает Intel Thread Director)
20IA32_HWP_REQUESTбездействующего логического процессора игнорируется, когда активен только один из двух логических процессоров, совместно использующих физический процессор .
21(сдержанный)
22HWP Управление MSRIA32_HWP_CTL( 776h) MSR поддерживается [98]
23Поддерживается Intel Thread Director. Добавлены MSR:
  • IA32_THREAD_FEEDBACK_CHAR( 17D2h)
  • IA32_HW_FEEDBACK_THREAD_CONFIG( 17D4h)
24IA32_THERM_INTERRUPTПоддерживается MSR бит 25

31:25
 
(сдержанный)
  1. ^ Только в процессорах семейства Intel Pentium 4 бит 2 EAX используется для указания OPP (защита рабочей точки) [97] вместо ARAT.
  2. ^ Чтобы включить быстрый (несериализующийся) режим доступа для IA32_HWP_REQUESTMSR на процессорах, которые его поддерживают, необходимо установить бит 0 FAST_UNCORE_MSRS_CTL( 657h) MSR.
CPUID EAX=6: поля функций управления температурой/питанием в EBX, ECX и EDX
КусочекEBXЕкбEDXКусочек
0Количество порогов прерывания в цифровом тепловом датчикеПоддерживаемый эффективный частотный интерфейс - IA32_MPERF( 0E7h) и IA32_APERF( 0E8h) MSRОтчеты об отзывах оборудования: поддерживается отчетность о возможностях производительности0
1(Возможность ACNT2) [a]Отчеты об отзывах оборудования: поддерживается отчетность о возможностях эффективности1
2(сдержанный)(сдержанный)2
3Возможность смещения производительности и энергии - IA32_ENERGY_PERF_BIAS( 1B0h) MSR3
7:4(сдержанный)(сдержанный)7:4
11:8Количество классов Intel Thread Director, поддерживаемых оборудованиемРазмер структуры интерфейса аппаратной обратной связи (в единицах по 4 КБ) минус 111:8
15:12(сдержанный)15:12

31:16
 
(сдержанный)Индекс строки этого логического процессора в структуре интерфейса аппаратной обратной связи
31:16
 
  1. ^ Бит "ACNT2 Capability" указан в Intel AP-485 rev 038 [99] и 039, но не указан ни в одной из ревизий Intel SDM. Известно, что эта функция существует только в нескольких процессорах Intel, например, Xeon "Harpertown" степпинга E0. [100]

EAX=7, ECX=0: Расширенные функции

Это возвращает флаги расширенных функций в EBX, ECX и EDX. Возвращает максимальное значение ECX для EAX=7 в EAX.

CPUID EAX=7,ECX=0: биты расширенных функций в EBX, ECX и EDX
КусочекEBXЕкбEDXКусочек
КороткийОсобенностьКороткийОсобенностьКороткийОсобенность
0fsgsbaseДоступ к базе %fs и %gsprefetchwt1PREFETCHWT1инструкция(sgx-tem) [а]?0
1IA32_TSC_ADJUST MSRavx512-vbmiИнструкции по векторной битовой манипуляции AVX-512sgx-ключиУслуги аттестации для Intel SGX1
2sgxРасширения программного обеспечения GuardумипПредотвращение инструкций пользовательского режимаavx512-4vnniwИнструкции нейронной сети AVX-512 с 4 регистрами2
3бми1Набор инструкций по битовой манипуляции 1пкуКлючи защиты памяти для страниц пользовательского режимаavx512-4fкартыAVX-512 4-регистровый умножитель с накоплением, одинарная точность3
4хлеTSX Аппаратная блокировка ElisionоспкеPKU поддерживается ОСфсрмБыстрый короткийREP MOVSB4
5avx2Расширенные векторные расширения 2waitpkgИнструкции по временной паузе и мониторингу/ожиданию на уровне пользователя ( TPAUSE, UMONITOR, UMWAIT)uintrПрерывания между процессорами пользователя5
6fdp-excptn-onlyРегистр указателя данных FPU x87 обновляется только при исключенияхavx512-vbmi2Инструкции по векторной битовой манипуляции AVX-512 2(сдержанный)6
7смэпПредотвращение выполнения режима супервизораcet_ss/шсткОбеспечение потока управления (CET): теневой стек (альтернативное название SHSTK)(сдержанный)7
8бми2Набор инструкций по битовой манипуляции 2гфниИнструкции по полю Галуаavx512-vp2intersectИнструкции по векторному пересечению AVX-512 для 32/64-битных целых чисел8
9эммУлучшенныйREP MOVSB/STOSBваесНабор инструкций Vector AES (VEX-256/EVEX)srbds-ctrlСпециальные буферные регистры выборки данных смягчения9
10invpcidINVPCIDинструкцияvpclmulqdqНабор инструкций CLMUL (VEX-256/EVEX)md-чистыйVERWинструкция очищает буферы ЦП10
11ртмОграниченная транзакционная память TSXavx512-vnniИнструкции векторной нейронной сети AVX-512rtm-всегда-отмена [101]Все транзакции TSX отменены11
12рдт-м/пквмМониторинг Intel Resource Director (RDT) или мониторинг QOS платформы AMDavx512-биталгИнструкции AVX-512 BITALG(сдержанный)12
13x87 FPU CS и DS устарелиtme_ruДоступны MSR для полного шифрования памятиrtm-force-abort [101]TSX_FORCE_ABORT (MSR 0x10f) доступен13
14мпхIntel MPX (расширения защиты памяти)avx512-vpopcntdqПодсчет популяции вектора AVX-512 с двойным и четверным словомсериализоватьSERIALIZEинструкция14
15rdt-a/pqeРаспределение ресурсов Intel Resource Director (RDT) или обеспечение QOS на платформе AMD(фзм) [а]?гибридныйСмешение типов ЦП в топологии процессора (например, Alder Lake )15
16avx512-фAVX-512 Фундаментла575-уровневая страничная адресация (57 бит адреса)tsxldtrkИнструкции по приостановке/возобновлению отслеживания адреса загрузки TSXTSUSLDTRK ( и TRESLDTRK)16
17avx512-dqИнструкции AVX-512 Doubleword и QuadwordмавауЗначение пользовательского пространства MPX Address-Width Adjust, используемое инструкциями MPXBNDLDX и Intel в 64-битном режимеBNDSTX (сдержанный)17
18rdseedRDSEEDинструкцияpconfigКонфигурация платформы (Инструкции по технологиям шифрования памяти)18
19адксIntel ADX (расширения инструкций сложения и переноса с высокой точностью)лбрАрхитектурные записи последней ветви19
20смапаПредотвращение доступа в режиме супервизораcet-ibtОбеспечение потока управления (CET): косвенное отслеживание ветвлений20
21avx512-ifmaИнструкции AVX-512 по целочисленному умножению-сложению(сдержанный)21
22(pcommit)( PCOMMITинструкция, устарело) [103]rdpidRDPID(Чтение идентификатора процессора) инструкция и IA32_TSC_AUX MSRamx-bf16Вычисление плитки AMX на числах bfloat1622
23clflushoptCLFLUSHOPTинструкцияклШкафчик для ключей AESavx512-fp16 Арифметические инструкции с плавающей точкой половинной точности AVX-512 [104]23
24клвбCLWB(Инструкция обратной записи строки кэша)bus-lock-обнаружениеИсключения отладки блокировки шиныamx-плиткаИнструкции по загрузке/хранению плитки AMX24
25птТрассировка процессора IntelcldemoteCLDEMOTE(Понижение уровня строки кэша) инструкцияamx-int8Вычисление плитки AMX на 8-битных целых числах25
26avx512-pfИнструкции предварительной выборки AVX-512(мпрр) [а]?ibrs / spec_ctrlКонтроль спекуляций, часть контроля косвенных ветвей (IBC):
спекуляция с ограничением косвенных ветвей (IBRS) и
барьер предсказания косвенных ветвей (IBPB) [105] [106]
26
27avx512-erAVX-512 Экспоненциальные и обратные инструкциимовдириMOVDIRIинструкциястибпОднопоточный косвенный предиктор ветвления, часть IBC [105]27
28avx512-cdИнструкции по обнаружению конфликтов AVX-512movdir64bMOVDIR64B(64-байтовая инструкция прямого хранения)L1D_FLUSHIA32_FLUSH_CMD МСР28
29шаРасширения SHA-1 и SHA-256enqcmdПоставить в очередь магазины и EMQCMD/ EMQCMDSинструкцииIA32_ARCH_CAPABILITIES MSR (перечисляет спекулятивные меры по смягчению последствий сторонних каналов [105] )29
30avx512-bwИнструкции по байтам и словам AVX-512sgx-lcКонфигурация запуска SGXIA32_CORE_CAPABILITIES MSR (перечисляет основные возможности модели)30
31avx512-vlРасширения длины вектора AVX-512пксКлючи защиты для страниц режима супервизорассбдОтключение обхода спекулятивного магазина, [105] как смягчение для обхода спекулятивного магазина (IA32_SPEC_CTRL)31
  1. ^ abc По состоянию на апрель 2024 года биты FZM, MPRR и SGX_TEM указаны только в документации Intel TDX [102] и не установлены ни в одном известном процессоре.

EAX=7, ECX=1: Расширенные функции

Это возвращает флаги расширенных функций во всех четырех регистрах.

CPUID EAX=7,ECX=1: биты расширенных функций в EAX, EBX, ECX и EDX
КусочекЕАХEBXЕкбEDXКусочек
КороткийОсобенностьКороткийОсобенностьКороткийОсобенностьКороткийОсобенность
0ша512Расширения SHA-512Intel PPIN (защищенный инвентарный номер процессора): IA32_PPIN_CTL ( 04Eh) и IA32_PPIN ( 04Fh) MSR.(сдержанный)(сдержанный)0
1см3Расширения хэша SM3pbndkbПолное шифрование хранилища: PBNDKBинструкция и TSE_CAPABILITY ( 9F1h) MSR.(сдержанный)(сдержанный)1
2см4Расширения шифра SM4(сдержанный)(устаревшая_редуцированная_иса)(X86S, [107] отменено [108] )(сдержанный)2
3рао-интУдаленные атомарные операции над целыми числами: AADD, AAND, AOR, AXORинструкцииCPUIDMAXVAL_LIM_RMVЕсли 1, то бит 22 IA32_MISC_ENABLEне может быть установлен в 1, чтобы ограничить значение, возвращаемое функцией CPUID.(EAX=0):EAX[7:0].(сдержанный)(сдержанный)3
4avx-vnniИнструкции векторной нейронной сети AVX (VNNI) (в кодировке VEX)(сдержанный)(сипи64)64-битный SIPI (Startup InterProcessor Interrupt) (часть отмененного X86S)avx-vnni-int8Инструкции AVX VNNI INT84
5avx512-bf16Инструкции AVX-512 для чисел bfloat16(сдержанный)MSR_IMM Непосредственные формы RDMSRи WRMSRNSинструкцииavx-ne-конвертироватьИнструкции AVX по преобразованию FP без исключений ( bfloat16 ↔FP32 и FP16 →FP32)5
6девчонкаЛинейное разделение адресного пространства (CR4 бит 27)(сдержанный)(сдержанный)(сдержанный)6
7cmpccxaddCMPccXADDинструкции(сдержанный)(сдержанный)(сдержанный)7
8archperfmonextМониторинг архитектурных характеристик Расширенная створка (EAX=23h)(сдержанный)(сдержанный)amx-комплексПоддержка AMX для «сложных» плиток ( TCMMIMFP16PSи TCMMRLFP16PS)8
9(дедупликация) [а]?(сдержанный)(сдержанный)(сдержанный)9
10фзрмБыстрая нулевая длина REP MOVSB(сдержанный)(сдержанный)avx-vnni-int16Инструкции AVX VNNI INT1610
11фсрсБыстрый короткийREP STOSB(сдержанный)(сдержанный)(сдержанный)11
12rsrcsБыстро, коротко REP CMPSBиREP SCASB(сдержанный)(сдержанный)(сдержанный)12
13(сдержанный)(сдержанный)(сдержанный)утмрСобытия пользовательского таймера: IA32_UINTR_TIMER ( 1B00h) MSR13
14(сдержанный)(сдержанный)(сдержанный)префетчиИнструкции предварительной выборки кэша инструкций ( PREFETCHIT0и PREFETCHIT1)14
15(сдержанный)(сдержанный)(сдержанный)пользователь_msrИнструкции по доступу к MSR в пользовательском режиме ( URDMSRи UWRMSR)15
16(сдержанный)(сдержанный)(сдержанный)(сдержанный)16
17ФредГибкий возврат и доставка на мероприятие [109](сдержанный)(сдержанный)uiret-uif-из-rflagsЕсли 1, UIRETинструкция (возврат пользовательского прерывания) установит UIF (флаг пользовательского прерывания) в значение бита 1 образа RFLAGS, извлеченного из стека.17
18лкгсLKGSИнструкция [109](сдержанный)(сдержанный)cet-sssЕсли 1, то теневые стеки супервизора (SSS) контроля потока управления (CET) гарантированно не станут преждевременно занятыми, пока переключение теневого стека не приведет к ошибкам страниц в стеке, на который выполняется переключение. [110] [111]18
19wrmsrnsWRMSRNSинструкция (несериализующая запись в MSR )(сдержанный)(сдержанный)avx10AVX10 Конвергентный вектор ISA (см. также лист 24h) [112]19
20nmi_srcОтчет источника NMI [109](сдержанный)(сдержанный)(сдержанный)20
21amx-fp16Инструкции AMX для номеров FP16(сдержанный)(сдержанный)APX_FРасширения Advanced Performance Extensions , Foundation (добавляет REX2 и расширенные кодировки префиксов EVEX для поддержки 32 GPR, а также некоторые новые инструкции) [113]21
22hresetHRESETинструкция, IA32_HRESET_ENABLE ( 17DAh) MSR и сброс истории процессора Leaf (EAX=20h)(сдержанный)(сдержанный)(сдержанный)22
23avx-ifmaИнструкции AVX IFMA(сдержанный)(сдержанный)мждуИнструкция MWAIT [б]23
24(сдержанный)(сдержанный)(сдержанный)(сдержанный)24
25(сдержанный)(сдержанный)(сдержанный)(сдержанный)25
26ламМаскировка линейного адреса(сдержанный)(сдержанный)(сдержанный)26
27msrlistRDMSRLISTи WRMSRLISTинструкции, а также IA32_BARRIER ( 02Fh) MSR(сдержанный)(сдержанный)(сдержанный)27
28(сдержанный)(сдержанный)(сдержанный)(сдержанный)28
29(сдержанный)(сдержанный)(сдержанный)(сдержанный)29
30invd_disable_post_bios_doneЕсли 1, поддерживается INVDпредотвращение выполнения инструкций после завершения BIOS.(сдержанный)(сдержанный)(сдержанный)30
31МОВРСMOVRSи PREFETCHRST2поддерживаемые инструкции (чтение памяти/предварительная выборка с подсказкой общего чтения)(сдержанный)(сдержанный)(сдержанный)31
  1. ^ По состоянию на апрель 2024 года бит DEDUP указан только в документации Intel TDX [102] и не установлен ни в одном известном процессоре.
  2. ^ Поддержка инструкции MWAITможет быть указана либо CPUID.(EAX=1).ECX[3] , либо CPUID.(EAX=7,ECX=1).EDX[23]. (Один или оба могут быть установлены.) Первый MONITORтакже указывает на поддержку инструкции, в то время как последний не указывает тем или иным образом, MONITORприсутствует ли инструкция. MWAITбез MONITORможет присутствовать в системах, которые поддерживают функцию "Monitorless MWAIT" (которая сама по себе указана CPUID.(EAX=5).ECX[3] .)

EAX=7, ECX=2: Расширенные функции

Это возвращает флаги расширенных функций в EDX.

EAX, EBX и ECX зарезервированы.

CPUID EAX=7,ECX=2: Расширенные биты функций в EDX
КусочекEDX
КороткийОсобенность
0psfdПоддерживается отключение Fast Store Forwarding Predictor [114]SPEC_CTRL . ( (MSR 48h) бит 7)
1ipred_ctrlПоддерживаются элементы управления IPRED_DIS [115] . ( SPEC_CTRLбиты 3 и 4)

IPRED_DIS предотвращает спекулятивное выполнение инструкций в непрямой целевой точке ветвления до тех пор, пока не будет разрешен целевой адрес ветвления.

2rrsba_ctrlПоведение RRSBA [116] [115] отключено поддерживается. ( SPEC_CTRLбиты 5 и 6)
3ddpd_u Поддерживается отключение зависимой от данных предварительной выборки [117]SPEC_CTRL . ( бит 8)
4bhi_ctrlПоведение BHI_DIS_S [115] включено поддерживается. ( SPEC_CTRLбит 10)

BHI_DIS_S предотвращает выбор прогнозируемых целей косвенных ветвей, выполненных в кольце 0/1/2, на основе истории ветвей из ветвей, выполненных в кольце 3.

5mcdt_noЕсли установлено, процессор не будет демонстрировать синхронизацию, зависящую от конфигурации MXCSR .
6Поддерживается функция отключения UC-lock.
7монитор_mitg_noЕсли установлено, это указывает на то, что инструкции MONITOR/ UMONITORне подвержены проблемам с производительностью/питанием, вызванным превышением инструкций емкости внутренней таблицы отслеживания монитора. [118]

31:8
 
(сдержанный)

EAX=0Dh: XSAVE функции и компоненты состояния

Этот лист используется для перечисления функций XSAVE и компонентов состояния.

Расширение набора инструкций XSAVE предназначено для сохранения/восстановления расширенного состояния ЦП (обычно для переключения контекста ) таким образом, чтобы его можно было расширить для охвата новых расширений набора инструкций без необходимости понимания специфики новых расширений кодом переключения контекста ОС. Это делается путем определения ряда компонентов состояния , каждый из которых имеет размер и смещение в заданной области сохранения, и каждый соответствует подмножеству состояния, необходимого для того или иного расширения ЦП. EAX=0DhЛист CPUID используется для предоставления информации о том, какие компоненты состояния поддерживает ЦП и каковы их размеры/смещения, чтобы ОС могла зарезервировать надлежащее количество пространства и установить соответствующие биты включения.

Компоненты состояния можно разделить на две группы: пользовательское состояние (элементы состояния, которые видны приложению, например, векторные регистры AVX-512 ) и состояние супервизора (элементы состояния, которые влияют на приложение, но не видны пользователю напрямую, например, конфигурация прерывания пользовательского режима). Элементы пользовательского состояния включаются путем установки связанных с ними битов в XCR0регистре управления, в то время как элементы состояния супервизора включаются путем установки связанных с ними битов в IA32_XSS( 0DA0h) MSR - указанные элементы состояния затем становятся компонентами состояния, которые можно сохранять и восстанавливать с помощью семейства инструкций XSAVE/ .XRSTOR

Механизм XSAVE может обрабатывать до 63 компонентов состояния таким образом. Компоненты состояния 0 и 1 ( x87 и SSE соответственно) имеют фиксированные смещения и размеры - для компонентов состояния 2-62 их размеры, смещения и несколько дополнительных флагов можно запросить, выполнив CPUIDс EAX=0Dhи ECXустановив индекс компонента состояния. Это вернет следующие элементы в EAX, EBX и ECX (с зарезервированным EDX):

CPUID EAX=0Dh, ECX≥2: информация о состоянии компонента XSAVE
КусочекЕАХEBXЕкбКусочек
0Размер в байтах компонента состоянияСмещение state-компонента от начала области XSAVEсохраненияXRSTOR

(Это смещение равно 0 для компонентов состояния супервизора, поскольку их можно сохранить только с помощью инструкции XSAVES/ XRSTORS, которая использует сжатие.)

Компонент состояния пользователя/супервизора:
  • 0=пользовательское состояние (включено через XCR0)
  • 1=состояние супервизора (включено через IA32_XSS)
0
1При использовании сжатия сохранения состояния включается 64-байтовое выравнивание.

Если этот бит установлен для state-component, то при сохранении state с уплотнением, padding будет вставлен между предыдущим state-component и этим state-component по мере необходимости для обеспечения 64-байтового выравнивания. Если этот бит не установлен, state-component будет сохранен непосредственно после предыдущего.

1

31:2
 
(сдержанный)
31:2

Попытка запросить неподдерживаемый компонент состояния таким образом приводит к тому, что EAX, EBX, ECX и EDX устанавливаются в 0.

Подлистья 0 и 1 CPUIDлиста 0Dhиспользуются для предоставления информации о функциях:

CPUID EAX=0Dh,ECX=0: функции XSAVE
EBXЕкбEDX:EAX
Максимальный размер (в байтах) области сохранения XSAVE для набора компонентов состояния, установленных в данный момент в XCR0.Максимальный размер (в байтах) области сохранения XSAVE, если все компоненты состояния, поддерживаемые XCR0этим ЦП, были включены одновременно.64-битная битовая карта компонентов состояния, поддерживаемая XCR0этим процессором.
CPUID EAX=0Dh,ECX=1: расширенные функции XSAVE
ЕАХEBXEDX:ECX
Флаги функций XSAVE (см. таблицу ниже)Размер (в байтах) области XSAVE, содержащей все установленные в данный момент компоненты состояния XCR0и IA32_XSSобъединенные.64-битная битовая карта компонентов состояния, поддерживаемая IA32_XSSэтим процессором.
EAX=0Dh,ECX=1: флаги функций XSAVE в EAX
КусочекЕАХ
КороткийОсобенность
0xsaveoptXSAVEOPTинструкция: сохранить компоненты состояния, которые были изменены с момента последнегоXRSTOR
1xsavecXSAVECинструкция: сохранить/восстановить состояние с уплотнением
2xgetbv_ecx1XGETBVс ECX=1поддержкой
3хссXSAVESи XRSTORSинструкции и IA32_XSSMSR: сохранение/восстановление состояния со сжатием, включая состояние супервизора.
4xfdПоддерживается XFD (отключение расширенных функций)

31:5
 
(сдержанный)

По состоянию на июль 2023 года архитектурно определены следующие компоненты состояния XSAVE:

XSAVE Состояние-компоненты
ИндексОписаниеВключено с
0состояние x87XCR0 [а]
1Состояние SSEXMM0 : - XMM15иMXCSRXCR0
2Состояние AVX : верхние половины YMM0кYMM15
3Состояние MPXBND0 : - BND3регистры границ
4Состояние MPX: BNDCFGUи BNDSTATUSрегистры
5Состояние AVX-512 : регистры opmask k0-k7
6Состояние AVX-512 "ZMM_Hi256": верхние ZMM0половиныZMM15
7Состояние AVX-512 "Hi16_ZMM": ZMM16-ZMM31
8Состояние трассировки процессораIA32_XSS
9Реестр ПКРУ (ключей защиты пользователей)XCR0
10Состояние PASID (идентификатор адресного пространства процесса)IA32_XSS
11Состояние CET_U (технология обеспечения потока управления: функциональность пользовательского режима MSR)
12Состояние CET_S (CET: указатели теневого стека для колец 0,1,2)
13Состояние HDC (аппаратный циклический режим)
14Состояние UINTR (прерывания пользовательского режима)
15Состояние LBR (запись последней ветви)
16Состояние HWP (аппаратное управление P-состоянием)
17Состояние конфигурации плитки AMX :TILECFGXCR0
18Регистры данных плитки AMX: tmm0-tmm7
19Расширенные регистры общего назначения APXr16 : - r31[113]

20-61
 
(сдержанный)
62Облегченное профилирование (LWP) (только AMD)XCR0
63(зарезервировано) [б]
  1. ^ Бит 0 XCR0жестко установлен в 1, поэтому инструкции XSAVE всегда будут поддерживать сохранение/восстановление состояния x87.
  2. ^ Для регистров XCR0и IA32_XSSбит 63 зарезервирован специально для расширения битового вектора — это исключает существование компонента состояния 63.

EAX=12h: Возможности SGX

Этот лист предоставляет информацию о поддерживаемых возможностях функции Intel Software Guard Extensions (SGX). Лист предоставляет несколько подлистов, выбранных с помощью ECX.

Подлист 0 предоставляет информацию о поддерживаемых функциях листа SGX в EAX и максимальных поддерживаемых размерах анклава SGX в EDX; ECX зарезервирован. EBX предоставляет битовую карту битов, которые можно установить в поле MISCSELECT в SECS (структура управления анклавом SGX) — это поле используется для управления информацией, записанной в область MISC SSA (область сохранения состояния SGX), когда происходит AEX (выход из асинхронного анклава SGX).

CPUID EAX=12h,ECX=0: листовые функции SGX , MISCSELECT и максимальные размеры
КусочекЕАХEBXEDXКусочек
КороткийОсобенностьКороткийОсобенностьКороткийОсобенность
0sgx1Функции листьев SGX1ЭКСИНФОMISCSELECT: вывести информацию об ошибке страницы и общем исключении защиты, произошедшем внутри анклаваМакс.РазмерАнклава_Не64Log2 максимального размера анклава, поддерживаемого в не-64-битном режиме0
1sgx2Листовые функции SGX2CPINFOMISCSELECT: сообщить информацию об исключении защиты управления, которое произошло внутри анклава1
2(сдержанный)(сдержанный)2
3(сдержанный)(сдержанный)3
4(сдержанный)(сдержанный)4
5оссENCLVлистья: EINCVIRTCHILD, EDECVIRTCHILD, иESETCONTEXT(сдержанный)5
6ENCLSлистья: ETRACKC, ERDINFO, ELDBC,ELDUC(сдержанный)6
7ENCLUлист:EVERIFYREPORT2(сдержанный)7
8(сдержанный)(сдержанный)МаксРазмерАнклава_64Log2 максимального размера анклава, поддерживаемого в 64-битном режиме8
9(сдержанный)(сдержанный)9
10ENCLSлист:EUPDATESVN(сдержанный)10
11ENCLUлист:EDECSSA(сдержанный)11
12(сдержанный)(сдержанный)12
13(сдержанный)(сдержанный)13
14(сдержанный)(сдержанный)14
15(сдержанный)(сдержанный)15

31:16
 
(сдержанный)(сдержанный)(сдержанный)
31:16
 

Подлист 1 предоставляет битовую карту того, какие биты могут быть установлены в 128-битном поле АТРИБУТЫ SECS в EDX:ECX:EBX:EAX (это относится к копии SECS, используемой в качестве входных данных для ENCLS[ECREATE]функции листа). Верхние 64 бита (указанные в EDX:ECX) являются битовой картой того, какие биты могут быть установлены в XFRM (маска запроса X-feature) - эта маска является битовой маской того, какие компоненты состояния ЦП (см. лист 0Dh) будут сохранены в SSA в случае AEX; это имеет ту же структуру, что и XCR0регистр управления. Другие биты указаны в EAX и EBX следующим образом:

CPUID EAX=12h,ECX=1: устанавливаемые биты SGX в SECS.ATTRIBUTES
КусочекЕАХEBXКусочек
КороткийОсобенностьКороткийОсобенность
0(ИНИТ)(должно быть 0) [а](сдержанный)0
1ОТЛАЖИВАТЬРазрешить отладчику читать и записывать данные анклава с помощью EDBGRDиEDBGWR1
2РЕЖИМ64БИТ64-битный режим анклава2
3(сдержанный)3
4ПРОВИЖНИЙКЛЮЧКлюч обеспечения доступен изEGETKEY4
5EINITTOKEN_KEYEINITключ-токен доступен изEGETKEY5
6среднеевропейское времяАтрибуты CET (технология обеспечения потока управления) позволяют6
7КССРазделение и совместное использование ключей7
8(сдержанный)8
9(сдержанный)9
10AEXNOTIFYПотоки внутри анклава могут получать уведомления AEX [119]10

31:11
 
(сдержанный)
31:11
 
  1. ^ Для копии SECS, которая существует внутри exclave, бит 0 (INIT) SECS.ATTRIBUTES используется для указания того, что анклав был инициализирован с помощью ENCLS[EINIT]. Этот бит должен быть 0 в копии SECS, которая задана как вход для ENCLS[CREATE].

Подразделы 2 и выше используются для предоставления информации о том, какие области физической памяти доступны для использования в качестве разделов EPC (Enclave Page Cache) в SGX.

CPUID EAX=12h,ECX≥2: информация о разделе кэша страниц анклава SGX
БитыЕАХEBXЕкбEDXБиты
3:0Тип подлистника:
  • 0000: Недействительно
  • 0001: Раздел EPC
  • другое: зарезервировано
Биты 51:32 физического базового адреса раздела EPCСвойства раздела EPC:
  • 0000: Недействительно
  • 0001: Имеет конфиденциальность, целостность и защиту от повторного воспроизведения
  • 0010: Имеет только защиту конфиденциальности
  • 0011: Имеет защиту конфиденциальности и целостности
  • другое: зарезервировано
Биты 51:32 размера раздела EPC3:0

11:4
 
(сдержанный)(сдержанный)
11:4
 

19:12
 
Биты 31:12 физического базового адреса раздела EPCБиты 31:12 размера раздела EPC
19:12
 

31:20
 
(сдержанный)(сдержанный)
31:20
 

EAX=14h, ECX=0: Трассировка процессора

В этом подразделе представлена ​​информация о функциях трассировки процессора Intel (также известной как трассировка инструкций в реальном времени).

Значение, возвращаемое в EAX, является индексом наивысшего подлиста, поддерживаемого для CPUID с EAX=14h. EBX и ECX предоставляют флаги функций, EDX зарезервирован.

CPUID EAX=14h,ECX=0: биты функций трассировки процессора в EBX и ECX
КусочекEBXЕкбКусочек
КороткийОсобенностьКороткийОсобенность
0Поддерживается фильтрация CR3топоаутПоддерживается механизм вывода ToPA (таблица физических адресов) для пакетов трассировки0
1Поддерживается настраиваемая скорость передачи пакетов PSB (Packet Stream Boundary) и режим Cycle-Accurate (пакеты CYC)ментриТаблицы ToPA могут содержать несколько выходных записей.1
2Поддерживается фильтрация IP, фильтрация TraceStop и сохранение MSR PT при «горячем» сбросеsnglrngoutПоддерживается схема однодиапазонного выхода2
3Поддерживаются пакеты синхронизации MTC (Mini Time Counter), а также подавление пакетов COFI (Change of Flow Instructions).Поддерживается подсистема вывода в Trace Transport3
4ptwritePTWRITEинструкция поддерживается(сдержанный)4
5Поддерживается трассировка событий питания(сдержанный)5
6Поддерживается сохранение PSB и PMI (прерывание мониторинга производительности)(сдержанный)6
7Поддерживается генерация пакета Event Trace(сдержанный)7
8Поддерживается отключение генерации пакетов TNT (Branch Taken-Not-Taken).(сдержанный)8
9Поддерживается PTTT (отслеживание триггера трассировки процессора)(сдержанный)9

30:10
 
(сдержанный)(сдержанный)
30:10
 
31(сдержанный)Формат IP (Instruction Pointer) для пакетов трассировки, содержащих полезную нагрузку IP:
  • 0=RIP (эффективный IP-адрес)
  • 1=LIP (IP с линейным адресом, с добавленным базовым адресом CS)
31

EAX=15h и EAX=16h: тактовые частоты процессора, TSC, шины и кристалла ядра

Эти два листа предоставляют информацию о различных частотах ЦП в EAX, EBX и ECX (EDX зарезервирован в обоих листах).

CPUID EAX=15h: информация о частоте TSC и Core Crystal
ЕАХEBXЕкб
Отношение частоты TSC к частоте Core Crystal Clock, знаменательОтношение частоты TSC к частоте Core Crystal Clock, числитель [a]Частота ядра кристалла, в Гц [ a]
CPUID EAX=16h: Частоты спецификации процессора и шины [b]
БитыЕАХEBXЕкбБиты
15:0Базовая частота процессора (в МГц) [a]Максимальная частота процессора (в МГц) [a]Частота шины/эталона (в МГц) [a]15:0
31:16(сдержанный)(сдержанный)(сдержанный)31:16
  1. ^ abcde Поле не нумеруется, если равно нулю.
  2. ^ Значения частоты, сообщаемые листом 16h, являются частотами спецификации процессора — они постоянны для данного процессора и не обязательно отражают фактическую тактовую частоту процессора на момент вызова CPUID.

Если возвращаемые значения в EBX и ECX листа 15h оба не равны нулю, то частота TSC ( счетчик отметок времени ) в Гц определяется как TSCFreq = ECX*(EBX/EAX).

На некоторых процессорах (например, Intel Skylake ) CPUID_15h_ECX равен нулю, но CPUID_16h_EAX присутствует и не равен нулю. На всех известных процессорах, где это так, [120] частота TSC равна базовой частоте процессора, а тактовая частота кристалла ядра в Гц может быть вычислена как CoreCrystalFreq = (CPUID_16h_EAX * 10000000) * (CPUID_15h_EAX/CPUID_15h_EBX).

На процессорах, которые перечисляют отношение TSC/Core Crystal Clock в листе CPUID 15h, частота таймера APIC будет равна частоте Core Crystal Clock, деленной на делитель, указанный в регистре конфигурации деления APIC. [121]

EAX=17h: Перечисление атрибутов поставщика SoC

Этот лист присутствует в системах, где ядро ​​IP ЦП x86 реализовано в SoC ( система на чипе ) от другого поставщика - тогда как другие листья CPUIDпредоставляют информацию о ядре ЦП x86, этот лист предоставляет информацию о SoC. Этот лист принимает индекс подлиста в ECX.

Подлист 0 возвращает максимальный индекс подлиста в EAX (не менее 3) и идентификационную информацию SoC в EBX/ECX/EDX:

CPUID EAX=17h,ECX=0: идентификационная информация SoC
КусочекEBXЕкбEDXКусочек
15:0Идентификатор поставщика SoCИдентификатор проекта SoCИдентификатор шага SoC в проекте SoC15:0
16Схема идентификатора поставщика SoC
  • 0: Идентификаторы поставщиков, назначенные Intel [a]
  • 1: Стандартная отраслевая схема подсчета [b]
16
31:17(сдержанный)31:17
  1. ^ По состоянию на май 2024 года известно, что Intel присвоила следующие идентификаторы поставщиков:
    ИДЕНТИФИКАТОРПродавец
    1Спредтрум [122]
  2. ^ По состоянию на май 2024 года в документации Intel не указано, какую схему перечисления «отраслевого стандарта» следует использовать для идентификатора поставщика в EBX[15:0], если установлен EBX[16].

Подразделы 1–3 возвращают 48-байтовую строку бренда поставщика SoC в формате UTF-8 . Подраздел 1 возвращает первые 16 байт в EAX, EBX, ECX, EDX (в указанном порядке); подраздел 2 возвращает следующие 16 байт, а подраздел 3 возвращает последние 16 байт. Строка допускается, но не обязательно должна заканчиваться нулем .

EAX=19h: Функции Intel Key Locker

В этом листе представлена ​​информация о функциях Intel Key Locker в EAX, EBX и ECX. EDX зарезервирован.

CPUID EAX=19h: биты функции Key Locker в EAX, EBX и ECX
КусочекЕАХEBXЕкбКусочек
КороткийОсобенностьКороткийОсобенностьКороткийОсобенность
0Ограничение Key Locker поддерживается только CPL0aes_kleВключены инструкции AES "Key Locker"Параметр без резервного копирования LOADIWKEYподдерживается0
1Ограничение Key Locker на отсутствие шифрования поддерживается(сдержанный)Поддерживается кодировка KeySource 1 (рандомизация внутреннего ключа упаковки)1
2Поддерживается ограничение Key Locker на отсутствие дешифрованияaes_wide_klИнструкции AES "Широкий шкафчик с ключом"(сдержанный)2
3(Ограничение процесса) [a](сдержанный)(сдержанный)3
4(сдержанный)kl_msrsMSR «Key Locker»(сдержанный)4

31:5
 
(сдержанный)(сдержанный)(сдержанный)
31:5
 
  1. ^ По состоянию на апрель 2024 года бит «Ограничение процесса» указан только в документации Intel TDX [102] и не установлен ни в одном известном процессоре.


EAX=1Dh: Информация о плитке

Когда ECX=0, в EAX перечисляется наивысший поддерживаемый "палитра" subleaf. Когда , возвращается ECX≥1информация о палитре n .

CPUID EAX=1Dh,ECX≥1: Информация о палитре плиток n
БитыЕАХEBXЕкбEDXБиты
КороткийОсобенностьКороткийОсобенностьКороткийОсобенностьКороткийОсобенность
15:0общее_количество_байтов_плитокРазмер всех регистров плитки, в байтах (8192)байт_на_строку(64)макс_строк(16)(сдержанный)15:0
31:16байт_на_плиткуРазмер одной плитки, в байтах (1024)макс_именаКоличество регистров плитки (8)(сдержанный)(сдержанный)31:16

EAX=1Eh, ECX=0: TMULИнформация

Этот лист возвращает информацию о TMULединице (множителе плитки).

CPUID EAX=1Eh,ECX=0: TMULИнформация
БитыЕАХEBXЕкбEDXБиты
КороткийОсобенностьКороткийОсобенностьКороткийОсобенностьКороткийОсобенность
7:0(сдержанный)tmul_maxkМаксимальное количество строк или столбцов (16)(сдержанный)(сдержанный)7:0
15:8(сдержанный)tmul_maxnМаксимальное количество байтов на столбец (64)(сдержанный)(сдержанный)15:8
23:16(сдержанный)(сдержанный)(сдержанный)(сдержанный)23:16
31:24(сдержанный)(сдержанный)(сдержанный)(сдержанный)31:24

EAX=1Eh, ECX=1: TMULИнформация

Этот лист возвращает флаги функций на TMULблоке (множитель плитки).

CPUID EAX=1Eh,ECX=0: TMULИнформация
БитыЕАХEBXЕкбEDXБиты
КороткийОсобенностьКороткийОсобенностьКороткийОсобенностьКороткийОсобенность
0amx-int8Поддержка 8-битных целых чисел(сдержанный)(сдержанный)(сдержанный)0
1amx-bf16поддержка bfloat16(сдержанный)(сдержанный)(сдержанный)1
2amx-комплексПоддержка комплексных чисел(сдержанный)(сдержанный)(сдержанный)2
3amx-fp16поддержка float16(сдержанный)(сдержанный)(сдержанный)3
4amx-fp8поддержка float8(сдержанный)(сдержанный)(сдержанный)4
5amx-транспонированиеПоддержка инструкций по транспонированию(сдержанный)(сдержанный)(сдержанный)5
6amx-tf32поддержка tf32/fp19(сдержанный)(сдержанный)(сдержанный)6
7amx-avx512Поддержка AMX-AVX512(сдержанный)(сдержанный)(сдержанный)7
8amx-movrsПоддержка AMX-MOVRS(сдержанный)(сдержанный)(сдержанный)8
31:9(сдержанный)(сдержанный)(сдержанный)(сдержанный)31:9


EAX=21h: зарезервировано для перечисления TDX

Когда Intel TDX ( Trust Domain Extensions ) активен, попытки выполнить CPUIDинструкцию гостем TD ( Trust Domain ) будут перехвачены модулем TDX. Этот модуль, при CPUIDвызове с помощью EAX=21hи ECX=0(leaf 21h, sub-leaf 0 ), вернет индекс наивысшего поддерживаемого sub-leaf для leaf 21hin EAXи строку идентификатора поставщика модуля TDX в виде 12-байтовой строки ASCII в EBX, EDX, ECX (в указанном порядке). Собственная реализация модуля Intel возвращает строку идентификатора поставщика (с четырьмя конечными пробелами) [123] - для этого модуля дополнительная информация о функциях недоступна и должна быть получена через специфичную для TDX инструкцию."IntelTDX    "CPUIDTDCALL

Этот лист зарезервирован в оборудовании и (на процессорах, у которых наивысший базовый лист равен 21hили выше) вернет 0 в EAX/EBX/ECX/EDX при запуске непосредственно на ЦП.

EAX=24h, ECX=0: AVX10 Конвергентный вектор ISA

Это возвращает максимально поддерживаемый подлист в EAX и информацию о функциях AVX10 в EBX. [112] (ECX и EDX зарезервированы.)

CPUID EAX=24h, ECX=0: биты функций AVX10 в EBX
КусочекEBX
КороткийОсобенность
7:0Версия AVX10 Converged Vector ISA (≥1)
16:8(сдержанный)
17avx10-256Присутствует поддержка 256-битных векторов
18avx10-512Присутствует поддержка 512-битных векторов.
31:19(сдержанный)

EAX=24h, ECX=1: Дискретные функции AVX10

Subleaf 1 зарезервирован для функций AVX10, не привязанных к версии. В настоящее время не определены.

EAX=2000'0000h: Реализована наивысшая функция Xeon Phi

Самая высокая функция возвращается в EAX. Этот лист присутствует только на процессорах Xeon Phi . [124]

EAX=2000'0001h: функциональные биты Xeon Phi

Эта функция возвращает флаги функций.

CPUID EAX=2000'0001h: биты функций Xeon Phi
КусочекЕАХEBXЕкбEDXКусочек
КороткийОсобенностьКороткийОсобенностьКороткийОсобенностьКороткийОсобенность
3:0(сдержанный)(сдержанный)(сдержанный)(сдержанный)3:0
4(сдержанный)(сдержанный)(сдержанный)к1омК1ОМ [124]4
31:5(сдержанный)(сдержанный)(сдержанный)(сдержанный)31:5

EAX=4000'0000h-4FFFF'FFFh: Зарезервировано дляГипервизоры

При CPUIDвыполнении инструкции в условиях виртуализации Intel VT-x или AMD-v она будет перехвачена гипервизором, что позволит гипервизору вернуть CPUIDфлаги функций, которые отличаются от флагов базового оборудования. CPUIDЛистья не 40000000hреализованы 4FFFFFFFhна аппаратном уровне и зарезервированы для использования гипервизорами для предоставления специфичной для гипервизора идентификации и информации о функциях с помощью этого механизма перехвата.

Для leaf 40000000hгипервизор должен вернуть индекс самого высокого поддерживаемого листа CPUID гипервизора в EAX и 12-символьную строку идентификатора гипервизора в EBX,ECX,EDX (в указанном порядке). Для leaf 40000001hгипервизор может вернуть сигнатуру идентификации интерфейса в EAX — например, гипервизоры, желающие объявить о своей совместимости с Hyper-V, могут вернуть 0x31237648"Hv#1"в EAX. [125] [126] Форматы листьев 40000001hи до самого высокого поддерживаемого листа в остальном зависят от гипервизора. Гипервизоры, реализующие эти листья, обычно также устанавливают бит 31 ECX для листа CPUID 1, чтобы указать на их присутствие.

Гипервизоры, которые предоставляют более одного интерфейса гипервизора, могут предоставлять дополнительные наборы листьев CPUID для дополнительных интерфейсов с интервалом 100hлистьев на интерфейс. Например, когда QEMU настроен на предоставление интерфейсов Hyper-V и KVM , он предоставит информацию Hyper-V, начиная с листа CPUID 40000000h, и информацию KVM, начиная с листа 40000100h. [127] [128]

Вот некоторые гипервизоры, которые, как известно, возвращают строку идентификатора гипервизора в листе 40000000h:

CPUID EAX=40000x00h: 12-символьная строка идентификатора гипервизора в EBX,ECX,EDX
ГипервизорСтрока идентификатора (ASCII)Примечания
Microsoft Hyper-V ,
виртуальный ПК Windows
"Microsoft Hv"[125]
Linux KVM"KVMKVMKVM\0\0\0"[129]\0 обозначает символ ASCII NUL.
"Linux KVM Hv"[130]Эмуляция Hyper-V [131]
бхайв"BHyVE BHyVE ",
"bhyve bhyve "
В 2013 году строка идентификатора была изменена со смешанного регистра на нижний. [132]

Строка в нижнем регистре также используется в гипервизорах, производных от bhyve, таких как xhyve и HyperKit. [133]

Ксен"XenVMMXenVMM"[134]Только при использовании режима HVM (аппаратная виртуальная машина).
QEMU"TCGTCGTCGTCG"[135]Только при включенном TCG (генератор крошечных кодов).
Параллели" lrpepyh  vr"(возможно, это должно быть «prl hyperv», но оно закодировано как «lrpepyh vr» из-за несоответствия порядка байтов ) [ необходима цитата ]
VMware"VMwareVMware"[136]
Проект ACRN"ACRNACRNACRN"[137]
VirtualBox"VBoxVBoxVBox"[138]Только при настройке на использование поставщика паравиртуализации «hyperv».
Гипервизор QNX"QXNQSBMV"Метод обнаружения гипервизора QNX, представленный в официальной документации QNX [139], проверяет только первые 8 символов строки, как указано в EBX и ECX (включая изменение порядка байтов) — EDX игнорируется и может принимать любое значение.
NetBSD NVMM"___ NVMM ___"[140]
OpenBSD VMM"OpenBSDVMM58"[141]
Тюрьма"Jailhouse\0\0\0"[142]\0 обозначает символ ASCII NUL.
Intel HAXM"HAXMHAXMHAXM"[143]Проект прекращен.
Intel KGT (Надежный)"EVMMEVMMEVMM"[144]Только ветка "trusty" KGT, которая используется для дистрибутива архитектуры Intel x86 ОС Trusty (архив)

(KGT также возвращает подпись в CPUIDлисте 3: ECX= 0x4D4D5645 "EVMM"и EDX= 0x43544E49 "INTC")

Unisys s-Par"UnisysSpar64"[145]
Локхид Мартин LMHS"SRESRESRESRE"[146]

EAX=8000'0000h: наивысшая реализованная расширенная функция

Наивысший вызывающий параметр возвращается в EAX.

EBX/ECX/EDX возвращают строку идентификатора производителя (такую ​​же, как EAX=0) на процессорах AMD, но не на процессорах Intel.

EAX=8000'0001h: расширенная информация о процессоре и биты функций

Это возвращает флаги расширенных функций в EDX и ECX.

Многие биты EDX(биты с 0 по 9, с 12 по 17, 23 и 24) являются дубликатами битов EDXиз EAX=1листа — эти биты выделены светло-желтым цветом. (Эти дублирующиеся биты присутствуют в процессорах AMD, но не в процессорах Intel.)

Флаги функций AMD следующие: [147] [148]

CPUID EAX=80000001h: биты функций в EDX и ECX
КусочекEDXЕкбКусочек
КороткийОсобенностьКороткийОсобенность
0фпуВстроенный x87 FPUlahf_lmLAHF/ SAHFв длинном режиме0
1вмэРасширения виртуального режима (VIF)cmp_legacyГиперпоточность недопустима1
2деОтладка расширений ( CR4 бит 3)свмБезопасная виртуальная машина2
3псеРасширение размера страницыэкстапическийРасширенное пространство APIC3
4тскСчетчик отметок времениcr8_наследиеCR8 в 32-битном режиме4
5мсрРегистры, специфичные для моделиabm/lzcntРасширенная манипуляция битами и )(LZCNTPOPCNT5
6паэРасширение физического адресаsse4aSSE4a6
7мсеИсключение проверки машинысмещениеНеправильно настроенный режим SSE7
8cx8CMPXCHG8B( сравнить и поменять местами ) инструкция3dnowprefetchPREFETCHи PREFETCHWинструкции8
9апикВстроенный усовершенствованный программируемый контроллер прерыванийосввВидимый обходной путь ОС9
10(системный вызов) [a]( SYSCALL/ SYSRET, только K6)СРКВыборка на основе инструкций10
11системный вызов [б]SYSCALLи SYSRETинструкцииxopНабор инструкций XOP11
12мтррТип памяти Диапазон РегистрыскинитSKINIT/ STGIинструкции12
13стр.Страница Глобального Разрешения Бита в CR4вдтТаймер сторожевого таймера13
14МКААрхитектура машинной проверки(сдержанный)14
15смовУсловный ход и FCMOVинструкциилвпЛегкое профилирование [152]15
16погладить [c]Таблица атрибутов страницыфма44-операндные объединенные инструкции умножения-сложения16
17pse3636-битное расширение размера страницытсеРасширение кэша переводов17
18(сдержанный)(сдержанный)18
19и т.д.Идентификация бренда процессора " Athlon MP " / " Sempron " [d]nodeid_msrNodeID MSR ( C001_100C) [157]19
20нксбит NX(сдержанный)20
21(сдержанный)тбмМанипуляция с конечным битом21
22mmxextРасширенный ММХтопографическийРасширения топологии22
23ммксИнструкции MMXperfctr_coreРасширения счетчика производительности ядра23
24фкср [с]FXSAVE, FXRSTORинструкции, CR4 бит 9perfctr_nbРасширения счетчика производительности северного моста24
25fxsr_optFXSAVE/ FXRSTORоптимизации(StreamPerfMon)(Архитектура монитора потоковой производительности) [e]25
26pdpe1gbГигабайт страницдбксРасширения точек останова данных26
27rdtscpRDTSCPинструкцияperftscСчетчик временных меток производительности (PTSC)27
28(сдержанный)pcx_l2iРасширения счетчика производительности L2I28
29лмДлинный режиммониторxMONITORXи MWAITXинструкции29
303dnowextРасширенный 3DNow!addr_mask_extРасширение маски адреса до 32 бит для точек останова инструкций30
313dсейчас3DСейчас!(сдержанный)31
  1. ^ Использование бита EDX 10 для указания поддержки SYSCALL/ SYSRETдействительно только для процессоров AuthenticAMD семейства 5 модели 7 ( AMD K6 , 250 нм «Little Foot») — для всех остальных процессоров вместо этого следует использовать бит EDX 11.

    Эти инструкции были впервые введены в модели 7 [149] — бит CPUID, указывающий на их поддержку, был перемещен [150] в бит EDX 11, начиная с модели 8 ( AMD K6-2 ).

  2. ^ На процессорах Intel бит CPUID для SYSCALL/ SYSRETустанавливается только в том случае, если CPUIDинструкция выполняется в 64-битном режиме. [151]
  3. ^ ab На некоторых процессорах - Cyrix MediaGXm , [153] нескольких Geode (NatSemi Geode GXm, GXLV, GX1; AMD Geode GX1 [154] ) и Transmeta Crusoe [155] - биты EDX 16 и 24 имеют другое значение:
  4. ^ Бит 19 EDX используется для идентификации марки ЦП только на процессорах AuthenticAMD семейства 6 — этот бит в сочетании с сигнатурой процессора и скоростью системной шины используется для идентификации процессоров как многопроцессорных или имеющих торговую марку Sempron . [156]
  5. ^ Бит ECX 25 указан как StreamPerfMon только в ревизии 3.20 AMD APM [158] - он указан как зарезервированный в более поздних ревизиях. Бит установлен только на процессорах Excavator и Steamroller.

EAX=8000'0002h,8000'0003h,8000'0004h: Строка марки процессора

Они возвращают строку марки процессора в EAX, EBX, ECX и EDX. CPUIDнеобходимо выдавать с каждым параметром по порядку, чтобы получить всю 48-байтовую строку марки процессора ASCII. [159] Необходимо проверить, присутствует ли функция в ЦП, выдав сначала CPUIDwith EAX = 80000000hи проверив, не меньше ли возвращаемое значение 80000004h.

В документации Intel/AMD указано, что строка должна заканчиваться нулем , однако это не всегда так (например, известно, что DM&P Vortex86DX3 и AMD Ryzen 7 6800HS возвращают строки брендов без завершающего нуля в листьях 80000002h- 80000004h[160] [161] ), и программное обеспечение не должно полагаться на это.

#include <stdio.h> #include <string.h> #include <cpuid.h>   int main () { unsigned int regs [ 12 ]; char str [ sizeof ( regs ) + 1 ];       __cpuid ( 0x80000000 , регистры [ 0 ], регистры [ 1 ], регистры [ 2 ], регистры [ 3 ]);     если ( regs [ 0 ] < 0x80000004 ) вернуть 1 ;      __cpuid ( 0x80000002 , регистры [ 0 ], регистры [ 1 ], регистры [ 2 ], регистры [ 3 ]); __cpuid ( 0x80000003 , регистры [ 4 ], регистры [ 5 ], регистры [ 6 ], регистры [ 7 ]); __cpuid ( 0x80000004 , регистры [ 8 ], регистры [ 9 ], регистры [ 10 ], регистры [ 11 ]);               memcpy ( str , regs , sizeof ( regs )); str [ sizeof ( regs )] = '\0' ; printf ( "%s \n " , str );        вернуть 0 ; } 

На процессорах AMD, начиная с 180 нм Athlon ( AuthenticAMDсемейство 6, модель 2 и более поздние), можно изменить строку бренда процессора, возвращаемую листьями CPUID 80000002h, 80000004hиспользуя WRMSRинструкцию для записи 48-байтовой строки замены в MSR C0010030h- C0010035h. [156] [162] Это также можно сделать на AMD Geode GX/LX, хотя и с использованием MSR 300Ah- 300Fh. [163]

В некоторых случаях для определения поставщика ЦП требуется изучить не только идентификатор поставщика в CPUID leaf 0 и подпись ЦП в leaf 1, но и строку бренда процессора в leaves 80000002h- 80000004h. Известные случаи включают:

  • Процессоры Montage Jintide можно отличить от моделей процессоров Intel Xeon, на которых они основаны, по наличию подстроки Montageв строке бренда процессоров Montage (например, Montage Jintide C2460 [164] и Intel Xeon Platinum 8160 [165] — оба из которых идентифицируют себя как GenuineIntelFamily 6 Model 55h Stepping 4 — можно отличить таким образом).
  • CentaurHaulsПроцессоры семейства 6 могут быть процессорами VIA или Zhaoxin — их можно отличить по наличию подстроки ZHAOXINв строке бренда процессоров Zhaoxin (например, Zhaoxin KaiXian ZX-C+ C4580 [166] и VIA Eden X4 C4250 [167] — оба из которых идентифицируют себя как CentaurHaulsсемейство 6, модель 0Fh, степпинг 0Eh — можно отличить таким образом).

EAX=8000'0005h: идентификаторы кэша L1 и TLB

This provides information about the processor's level-1 cache and TLB characteristics in EAX, EBX, ECX and EDX as follows:[a]

  • EAX: information about L1 hugepage TLBs (TLBs that hold entries corresponding to 2M/4M pages)[b]
  • EBX: information about L1 small-page TLBs (TLBs that hold entries corresponding to 4K pages)
  • ECX: information about L1 data cache
  • EDX: information about L1 instruction cache
CPUID EAX=80000002h: L1 Cache/TLB information in EAX,EBX,ECX,EDX
BitsEAXEBXECXEDXBits
7:0Number of instruction TLB entries[c]Cache line size in bytes7:0
15:8instruction TLB associativity[d]Number of cache lines per tag15:8
23:16Number of data TLB entries[c]Cache associativity[d]23:16
31:24Data TLB associativity[d]Cache size in kilobytes31:24
  1. ^ On some older Cyrix and Geode CPUs (specifically, CyrixInstead/Geode by NSC Family 5 Model 4 CPUs only), leaf 80000005h exists but has a completely different format, similar to that of leaf 2.[168]
  2. ^ On processors that can only handle small-pages in their TLBs, this leaf will return 0 in EAX. (On such processors, which include e.g. AMD K6 and Transmeta Crusoe, hugepage entries in the page-tables are broken up into 4K pages as needed upon entry into the TLB.)
    On some processors, e.g. VIA Cyrix III "Samuel",[169] this leaf returns 0x80000005 in EAX. This has the same meaning as EAX=0, i.e. no hugepage TLBs.
  3. ^ a b On Transmeta CPUs, the value FFh is used to indicate a 256-entry TLB.
  4. ^ a b c For the associativity fields of leaf 80000005h, the following values are used:
    ValueMeaning
    0(reserved)
    1Direct-mapped
    2 to FEhN-way set-associative (field encodes N)
    FFhFully-associative

EAX=8000'0006h: Extended L2 Cache Features

Returns details of the L2 cache in ECX, including the line size in bytes (Bits 07 - 00), type of associativity (encoded by a 4 bits field; Bits 15 - 12) and the cache size in KB (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) & 0x07; cache = (ecx >> 16) & 0xffff; printf("Line size: %d B, Assoc. type: %d, Cache size: %d KB.\n", lsize, assoc, cache); return 0;}

EAX=8000'0007h: Processor Power Management Information and RAS Capabilities

This function provides information about power management, power reporting and RAS (Reliability, availability and serviceability) capabilities of the CPU.

CPUID EAX=80000007h: RAS features in EBX and power management features in EDX
BitEBXEDXBit
ShortFeatureShortFeature
0MCAOverflowRecovMCA (Machine Check Architecture) overflow recovery supportTSTemperature Sensor0
1SUCCORSoftware uncorrectable error containment and recovery capabilityFIDFrequency ID Control1
2HWAHardware assert support (MSRs C001_10C0 to C001_10DFVIDVoltage ID Control2
3ScalableMcaScalable MCA supportedTTPTHERMTRIP3
4(reserved)TMHardware thermal control (HTC) supported4
5(reserved)STCSoftware thermal control (STC) supported[170]5
6(reserved)100MHzSteps100 MHz multiplier control6
7(reserved)HwPstateHardware P-state control (MSRs C001_0061 to C001_0063)7
8(reserved)TscInvariantInvariant TSC - TSC (Time Stamp Counter) rate is guaranteed to be invariant across all P-states, C-states and sop grant transitions.8
9(reserved)CPBCore Performance Boost9
10(reserved)EffFreqRORead-only effective frequency interface (MSRs C000_00E7 and C000_00E8)10
11(reserved)ProcFeedback­InterfaceProcessor Feedback Interface supported11
12(reserved)ProcPower­ReportingProcessor power reporting interface supported12
13(reserved)Connected­StandbyConnected Standby[171]13
14(reserved)RAPLRunning Average Power Limit[171]14
15(reserved)FastCPPCFast CPPC (Collaborative Processor Performance Control) supported[171]15

31:16
 
(reserved)(reserved)
31:16
 
CPUID EAX=80000007h: Processor Feedback info in EAX and power monitoring interface info in ECX
BitsEAXECXBits
ShortFeatureShortFeature
7:0NumberOfMonitorsNumber of Processor Feedback MSR pairs available, starting from MSR C001_0080 onwards[172]CpuPwrSample­TimeRatioRatio of compute unit power accumulator sample period to TSC counter period.7:0
15:8VersionProcessor Feedback Capabilities version15:8
31:16MaxWrapTimeMaximum time between reads (in milliseconds) that software should use to avoid two wraps.31:16

EAX=8000'0008h: Virtual and Physical Address Sizes

CPUID EAX=80000008h: Feature bits in EBX
BitEBX
ShortFeature
0clzeroCLZERO instruction
1retired_instrRetired instruction count MSR (C000_00E9h) supported
2xrstor_fp_errXRSTOR restores FP errors
3invlpgbINVLPGB and TLBSYNC instructions
4rdpruRDPRU instruction
5(reserved)
6mbeMemory Bandwidth Enforcement
7(reserved)
8mcommitMCOMMIT instruction
9wbnoinvdWBNOINVD instruction
10(reserved)
11(reserved)
12IBPBIndirect Branch Prediction Barrier (performed by writing 1 to bit 0 of PRED_CMD (MSR 049h))
13wbinvd_intWBINVD and WBNOINVD are interruptible
14IBRSIndirect Branch Restricted Speculation
15STIBPSingle Thread Indirect Branch Prediction mode
16IbrsAlwaysOnIBRS mode has enhanced performance and should be left always on
17StibpAlwaysOnSTIBP mode has enhanced performance and should be left always on
18ibrs_preferredIBRS preferred over software
19ibrs_same_mode_protectionIBRS provides Same Mode Protection
20no_efer_lmsleEFER.LMSLE is unsupported[a]
21invlpgb_nestedINVLPGB support for nested pages
22(reserved)
23ppinProtected Processor Inventory Number -

PPIN_CTL (C001_02F0) and PPIN (C001_02F1) MSRs are present[171]

24ssbdSpeculative Store Bypass Disable
25ssbd_legacySpeculative Store Bypass Disable Legacy
26ssbd_noSpeculative Store Bypass Disable Not Required
27cppcCollaborative Processor Performance Control
28psfdPredictive Store Forward Disable
29btc_noBranch Type Confusion: Processor not affected
30IBPB_RETIBPB (see bit 12) also clears return address predictor
31branch_samplingBranch Sampling Support[174]
CPUID EAX=80000008h: Size and range fields in EAX, ECX, EDX
BitsEAXECXEDXBits
7:0Number of Physical Address BitsNumber of Physical Threads in processor (minus 1)Maximum page count for INVLPGB instruction7:0
11:8Number of Linear Address Bits(reserved)11:8
15:12APIC ID Size15:12
17:16Guest Physical Address Size[b]Performance Timestamp Counter sizeMaximum ECX value recognized by RDPRU instruction17:16
23:18(reserved)23:18
31:24(reserved)31:24
  1. ^ The LMSLE (Long Mode Segment Limit Enable) feature does not have its own CPUID flag and is detected by checking CPU family and model. It was introduced in AuthenticAMD Family 0Fh Model 14h[173] (90nm Athlon64/Opteron) CPUs and is present in all later AMD CPUs - except the ones with the 'no_efer_lmsle' flag set.
  2. ^ A value of 0 indicates that the "Guest Physical Address Size" is the same as the "Number Of Physical Address Bits", specified in EAX[7:0].

EAX=8000'000Ah: SVM features

This leaf returns information about AMD SVM (Secure Virtual Machine) features in EAX, EBX and EDX.

CPUID EAX=8000000Ah: SVM information in EAX, EBX and ECX
BitsEAXEBXECXBits
7:0SVM Revision NumberNumber of available ASIDs
(address space identifiers)
(reserved)7:0
8(hypervisor)[a]8
31:9(reserved)31:9
CPUID EAX=8000000Ah: SVM feature flags in EDX
BitEDX
ShortFeature
0NPRapid Virtualization Indexing (Nested Paging)
1LbrVirtLBR (Last Branch Records) virtualization
2SVMLSVM-Lock
3NRIPSnRIP (next sequential instruction pointer) save on #VMEXIT supported
4TscRateMsrMSR-based TSC rate control (MSR C000_0104h)
5VmcbCleanVMCB (Virtual Machine Control Block) clean bits supported
6FlushByAsidTLB flush events (e.g. CR3 writes, CR4.PGE toggles) only flush the TLB entries of the current ASID (address space ID)
7DecodeAssistDecode assists supported
8PmcVirtPMC (Performance Monitoring Counters) virtualization
9(SseIsa10Compat)[b](reserved)
10PauseFilterPAUSE intercept filter supported
11(reserved)
12PauseFilter­ThresholdPAUSE filter cycle count threshold supported
13AVICAMD Advanced Virtualized Interrupt Controller supported
14(reserved)
15VMSAVEvirtVMSAVE and VMLOAD virtualization
16VGIFGlobal Interrupt Flag (GIF) virtualization
17GMETGuest Mode Execution Trap
18x2AVICx2APIC mode supported for AVIC
19SSSCheckSVM Supervisor shadow stack restrictions
20SpecCtrlSPEC_CTRL (MSR 2E0h) virtualization
21ROGPTRead-Only Guest Page Table supported
22(reserved)
23HOST_MCE_­OVERRIDEGuest mode Machine-check exceptions when host CR4.MCE=1 and guest CR4.MCE=0 cause intercepts instead of shutdowns
24TlbiCtlINVLPGB/TLBSYNC hypervisor enable in VMCB and TLBSYNC intercept support
25VNMINMI (Non-Maskable interrupt) virtualization
26IbsVirtIBS (Instruction-Based Sampling) virtualization
27ExtLvtOffset­FaultChgRead/Write fault behavior for extended LVT offsets (APIC addresses 0x500-0x530) changed to Read Allowed, Write #VMEXIT[181]
28VmcbAddr­ChkChgVMCB address check change[181]
29BusLock­ThresholdBus Lock Threshold
30IdleHlt­InterceptIdle HLT (HLT instruction executed while no virtual interrupt is pending) intercept
31Enhanced­Shutdown­InterceptSupport for EXITINFO1 on shutdown intercept, and nested shutdown intercepts will result in a non-interceptible shutdown.[182]
  1. ^ Early revisions of AMD's "Pacifica" documentation listed EAX bit 8 as an always-zero bit reserved for hypervisor use.[175]

    Later AMD documentation, such as #25481 "CPUID specification" rev 2.18[176] and later, only lists the bit as reserved.

    In rev 2.30[177] and later, a different bit is listed as reserved for hypervisor use: CPUID.(EAX=1):ECX[bit 31].

  2. ^ 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.[178]

    Rev 2.28 of #25481 lists the bit as "Ssse3Sse5Dis"[179] - in rev 2.34, it is listed as having been removed from the spec at rev 2.32 under the name "SseIsa10Compat".[180]

EAX=8000'001Fh: Encrypted Memory Capabilities

CPUID EAX=8000001Fh: Encrypted Memory feature bits in EAX
BitEAX
ShortFeature
0SMESecure Memory Encryption
1SEVSecure Encrypted Virtualization
2PageFlushMSRPage flush MSR (C001_011Eh) supported
3SEV-ESSEV Encrypted State
4SEV-SNPSEV Secure Nested Paging
5VMPLVM Privilege Levels
6RMPQUERYRMPQUERY instruction supported
7VmplSSSVMPL Supervisor shadow stack supported
8SecureTSCSecure TSC supported
9TscAux­VirtualizationVirtualization of TSC_AUX MSR (C000_0103) supported
10HwEnfCacheCohHardware cache coherency across encryption domains enforced
1164BitHostSEV Guest execution only allowed from 64-bit host
12Restricted­InjectionSEV-ES guests can refuse all event-injections except #HV (Hypervisor Injection Exception)
13Alternate­InjectionSEV-ES guests can use an encrypted VMCB field for event-injection
14DebugVirtFull debug state virtualization supported for SEV-ES and SEV-SNP guests
15PreventHostIBSPrevent host IBS for a SEV-ES guest
16VTEVirtual Transparent Encryption for SEV
17Vmgexit­ParameterVMGEXIT parameter is supported (using the RAX register)
18VirtualTomMsrVirtual TOM (top-of-memory) MSR (C001_0135) supported
19IbsVirtGuestCtlIBS virtualization is supported for SEV-ES and SEV-SNP guests
20PmcVirtGuestCtlPMC virtualization is supported for SEV-ES and SEV-SNP guests
21RMPREADRMPREAD instruction supported
22GuestIntercept­ControlGuest Intercept control supported for SEV-ES guests
23SegmentedRmpSegmented RMP (Reverse-Map Table) supported
24VmsaRegProtVMSA (VM Save Area) register protection supported
25SmtProtectionSMT Protection supported
26SecureAvicSecure AVIC supported
27AllowedSEV­featuresALLOWED_SEV_FEATURES_MASK field in VMCB (offset 138h) supported
28SVSMComm­PageMSRSVSM (Secure VM Service Module[183]) communication page MSR (C001_F000h) supported
29NestedVirt­SnpMsrVIRT_RMPUPDATE (C001_F001h) and VIRT_PSMASH (C001_F002h) MSRs supported
30HvInUse­WrAllowedWrites to Hypervisor-owned paged allowed when marked in-use
31IbpbOnEntryIBPB on entry to virtual machine supported
CPUID EAX=8000001Fh: Encrypted Memory feature information in EBX, ECX and EDX
BitsEBXECXEDXBits
5:0C-bit (encryption enable bit) location in page table entryMaximum ASID value that can be used for a SEV-enabled guest (maximum number of encrypted guests that can be supported simultaneously)Minimum ASID value for a guest that is SEV-enabled but not SEV-ES-enabled5:0
11:6Physical address width reduction when memory encryption is enabled11:6
15:12Number of VMPLs (VM Privilege Levels) supported15:12
31:16(reserved)31:16

EAX=8000'0021h: Extended Feature Identification

CPUID EAX=80000021h: Extended feature bits in EAX
BitEAX
ShortFeature
0NoNestedDataBpProcessor ignores nested data breakpoints
1FsGsKernelGsBase­NonSerializingWRMSR to the FS_BASE, GS_BASE and KernelGSBase MSRs is non-serializing[184]
2LFenceAlways­SerializingLFENCE is always dispatch serializing
3SmmPgCfgLockSMM paging configuration lock supported
4(reserved)
5(reserved)
6NullSelect­ClearsBaseNull segment selector loads also clear the destination segment register base and limit
7UpperAddress­IgnoreUpper Address Ignore is supported
8AutomaticIBRSAutomatic IBRS
9NoSmmCtlMSRSMM_CTL MSR (C0010116h) is not supported
10FSRSFast short REP STOSB supported
11FSRCFast short REPE CMPSB supported
12PMC2Precise­RetirePreciseRetire performance counter control bit (MSR C0010002h bit 43) supported[182]
13PrefetchCtlMsrPrefetchControl MSR (C0000108h) is supported
14L2TlbSIzeX32If set, L2 TLB sizes (leaf 80000006h) are encoded as multiples of 32
15AMD_ERMSBProcessor supports AMD implementation of Enhanced REP MOVSB and REP STOSB
16OPCODE_0F017_­RECLAIMReserves opcode 0F 01 /7 for AMD use, returning #UD.[182]
17CpuidUserDisCPUID disable for non-privileged software (#GP)
18EPSFEnhanced Predictive Store Forwarding supported[184]
19FAST_REP_SCASBFast Short REP SCASB supported
20PREFETCHIInstruction Cache prefetch instructions supported
21FP512_­DOWNGRADEDowngrade of 512-bit datapath to 256-bit supported.[a]
22WL_CLASS_­SUPPORTSupport for workload-based heuristic feedback to OS for scheduling decisions
23(reserved)
24ERAPSEnhanced Return Address Predictor Security (see also EBX[23:16] "RapSize")
25(reserved)
26(reserved)
27SBPBSelective Branch Predictor Barrier supported[186]
28IBPB_BRTYPEIBPB flushes all branch type predictions[186]
29SRSO_NOCPU is not subject to SRSO (Speculative Return Stack Overflow) vulnerability[186]
30SRSO_USER_­KERNEL_NOCPU is not subject to SRSO vulnerability across user/kernel boundary[186]
31SRSO_MSR_FIXSRSO can be mitigated by setting bit 4 of BP_CFG (MSR C001_102E)[186]
  1. ^ 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.[185]
CPUID EAX=80000021h: Extended feature information in EBX
BitEBX
ShortFeature
15:0MicrocodePatchSizeThe size of the Microcode patch in 16-byte multiples. If 0, the size of the patch is at most 5568 (15C0h) bytes
23:16RapSizeReturn Address Predictor Size.
RapSize * 8 is the minimum number of CALL instructions without matching RET instructions that are needed to flush the Return Address Predictor.
31:24(reserved)

EAX=8FFF'FFFFh: AMD Easter Egg

Several AMD CPU models will, for CPUID with EAX=8FFFFFFFh, return an Easter Egg string in EAX, EBX, ECX and EDX.[187][188] Known Easter Egg strings include:

ProcessorString
AMD K6NexGen‍erationAMD
AMD K8IT'S HAMMER TIME
AMD Jaguar[189]HELLO KITTY! ^-^

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.[190]

EAX=C000'0001h: Centaur Feature Information

This leaf returns Centaur feature information (mainly VIA PadLock) in EDX.[191][192] (EAX, EBX and ECX are reserved.)

CPUID EAX=C0000001h: Centaur feature bits in EDX
BitEDX
ShortFeature
0sm2[a]SM2 present
1sm2_en[a]SM2 enabled
2rngPadLock RNG present: XSTORE and REP XSTORE instructions
3rng_enRNG enabled
4ccs[a]PadLock SM3/SM4 instructions present: CCS_HASH and CCS_ENCRYPT
5ccs_en[a]SM3/SM4 instructions enabled
6xcryptPadLock Advanced Cryptographic Engine (ACE, using AES cipher) present: REP XCRYPT(ECB,CBC,CFB,OFB) instructions
7xcrypt_enACE enabled
8ace2ACE v2 present: REP XCRYPTCTR instruction, as well as support for digest mode and misaligned data for ACE's REP XCRYPT* instructions.
9ace2_enACE v2 enabled
10phePadLock Hash Engine (PHE): REP XSHA1 and REP XSHA256 instructions
11phe_enPHE enabled
12pmmPadLock Montgomery Multiplier (PMM): REP MONTMUL instruction
13pmm_enPMM enabled
14(reserved)
15zx_fmaFMA supported
16parallaxAdaptive P-state control present
17parallax_enAdaptive P-state control enabled
18overstressOverstress feature for auto overclock present
19overstress_enOverstress feature for auto overclock enabled
20tm3Thermal Monitor 3 present
21tm3_enThermal Monitor 3 enabled
22rng2RNG v2: Second generation RNG present
23rng2_enRNG v2 enabled
24semSME feature present
25phe2PHE v2: SHA384 and SHA512 present
26phe2_enPHE v2 enabled
27xmodxRSA instructions present: XMODEXP and MONTMUL2
28xmodx_enRSA instructions enabled
29vexVEX instructions present
30vex_enVEX instructions enabled
31stkSTK is present
  1. ^ a b c d On VIA Nehemiah and Antaur CPUs (CentaurHauls Family 6 Model 9 only),[193] bits 0,1,4,5 are used differently:

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>int main(){ unsigned int i, 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); } return 0;}

In MSVC and Borland/Embarcadero C compilers (bcc32) flavored inline assembly, the clobbering information is implicit in the instructions:

#include <stdio.h>int main(){ unsigned int a, b, c, d, i = 0; __asm { /* Do the call. */ mov EAX, i; cpuid; /* Save results. */ mov a, EAX; mov b, EBX; mov c, ECX; mov d, EDX; } printf ("InfoType %x\nEAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n", i, a, b, c, d); return 0;}

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>int main(){ unsigned int eax, 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); return 0;}

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>int main(){ unsigned int eax, 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"); return 1; } printf("EAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n", eax, ebx, ecx, edx); return 0;}

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.[194]

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>#endifint main(){ unsigned int regs[4]; int i; 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]); } return 0;}

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:

using System.Runtime.InteropServices;using System.Runtime.Intrinsics.X86;using System.Text;namespace X86CPUID { class CPUBrandString { public static void Main(string[] args) { if (!X86Base.IsSupported) { Console.WriteLine("Your CPU does not support CPUID instruction."); } else { Span<int> raw = stackalloc int[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); string brand = 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 CPUID coprocessor register which requires exception level EL1 or above to access.[195]
  • The IBM System z mainframe processors have a Store CPU ID (STIDP) instruction since the 1983 IBM 4381[196] for querying the processor ID.[197]
  • The IBM System z mainframe processors also have a Store Facilities List Extended (STFLE) instruction which lists the installed hardware features.[197]
  • The MIPS32/64 architecture defines a mandatory Processor Identification (PrId) and a series of daisy-chained Configuration Registers.[198]
  • 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.[199]

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.[citation needed]

See also

References

  1. ^ "Intel 64 and IA-32 Architectures Software Developer's Manual" (PDF). Intel.com. Retrieved 2013-04-11.
  2. ^ "Detecting Intel Processors - Knowing the generation of a system CPU". Rcollins.org. Retrieved 2013-04-11.
  3. ^ "LXR linux-old/arch/i386/kernel/head.S". Lxr.linux.no. Archived from the original on 2012-07-13. Retrieved 2013-04-11.
  4. ^ a b c Debbie Wiles, CPU Identification, archived on 2006-06-04
  5. ^ 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.
  6. ^ "CPUID, EAX=4 - Strange results (Solved)". Software.intel.com. Retrieved 2014-07-10.
  7. ^ @InstLatX64 (February 28, 2019). "First encounter with "GenuineIotel" (o after I, instead of n)" (Tweet) – via Twitter.
  8. ^ "GenuineIotel CPUID dump for Intel Xeon E3-1231". instlatx64.
  9. ^ instlatx64, CPUID dump for RDC IAD 100. Retrieved 22 December 2022.
  10. ^ a b c d smxi, Inxi issue 197: Elbrus CPU support data and implementation. Retrieved 23 October 2023. Archived on 23 October 2023.
  11. ^ Grzegorz Mazur, Identification of x86 CPUs with CPUID support, 5 May 1997. Archived from the original on 24 May 1997.
  12. ^ Ingo Böttcher, CPUDET.PAS v1.61, 23 Oct 1996 - CPU identification program that tests for "AMD ISBETTER" string. Archived on 26 Apr 2024.
  13. ^ sorgelig (Aug 3, 2017). "ao486 CPUID instruction (in commit 43a2004)". GitHub. Archived from the original on 2023-12-04. Retrieved 2023-12-04.
  14. ^ a b sorgelig (Aug 30, 2020). "Update cpuid. · MiSTer-devel/ao486_MiSTer@82f5014". GitHub. Archived from the original on 2023-12-04. Retrieved 2023-12-04.
  15. ^ sorgelig (Aug 30, 2020). "ao486 CPUID instruction". GitHub. Archived from the original on October 23, 2023. Retrieved 4 Dec 2023.
  16. ^ "v586: 586 compatible soft core for FPGA". GitHub. 6 December 2021.
  17. ^ "Steam Hardware & Software Survey". store.steampowered.com. Retrieved 2022-07-26.
  18. ^ "Fun with Timers and cpuid - by Jim Cownie - CPU fun". 3 March 2021.
  19. ^ virt-what source tree, tests/lx86/proc/cpuinfo - PowerVM Lx86 cpuinfo dump. Archived on 10 Nov 2024.
  20. ^ Neko Project 21/W, help/configure (in Japanese). Archived on 22 Sep 2024.
  21. ^ CPU-World, CPUID for emulated Neko Project CPU with "Neko Project" string. Archived on 21 Dec 2024.
  22. ^ iXBT Labs, VIA Nano CPUID Tricks, Aug 26, 2010. Archived on Aug 29, 2010.
  23. ^ IDT, WinChip 2A data sheet, v1.0, Jan 1999, page A-3.
  24. ^ VIA, C3 Nehemiah Datasheet, rev 1.13, Sep 29, 2004, page A-3.
  25. ^ Agner Fog, CpuIDFake, v1.00, Jan 22, 2010, see "Instructions.txt". Archived on Jul 9, 2010.
  26. ^ a b Transmeta, Crusoe BIOS Programmer's Guide, Jan 23, 2004, pages 63-65.
  27. ^ Transmeta, Efficeon BIOS Programmers Guide, Aug 19, 2003, section 8.3, page 148.
  28. ^ AMD, Geode LX Data Book, pub.id. 33234H, Feb. 2009, page 107. Archived on Dec 3, 2023.
  29. ^ DM&P, Vortex86EX2_A9133_Master_Data_Sheet_V11_BF, May 8, 2019, page 72.
  30. ^ "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.
  31. ^ 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.
  32. ^ InstLatx64, x86, x64 Instruction Latency, Memory Latency and CPUID dumps, 30 Sep 2023.
  33. ^ AMD, Enhanced Am486DX Microprocessor Family, pub.no. 20736 rev B, March 1997, section 9.2.2, page 55. Archived on 18 Oct 2023.
  34. ^ AMD, ÉlanSC400 and ÉlanSC410 Microcontrollers User's Manual, pub.no. 21030, 1997, section 3.6.2, page 73. Archived on 18 Oct 2023.
  35. ^ Cyrix, 5x86 BIOS Writers Guide, rev 1.12, order no. 92426-00, 1995, page 7
  36. ^ a b Cyrix, CPU Detection Guide, rev 1.01, 2 Oct 1997, page 6.
  37. ^ MiSTer ao486 source code, rtl/ao486/defines.v, line 70. Archived on 23 Oct 2023.
  38. ^ CPU-World, CPUID for Vortex86DX2 933 MHz. Archived on 17 Oct 2023.
  39. ^ CPU-World, CPUID for Vortex86EX2. Archived on 18 Oct 2023.
  40. ^ InstLatx64, Centaur CNS CPUID dump. Archived on 30 May 2023.
  41. ^ Jeff Atwood, Nasty Software Hacks and Intel's CPUID. Coding Horror, 16 Aug 2005.
  42. ^ a b Intel, 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.
  43. ^ CPU-World, CPUID for Intel Itanium 2 1.50 GHz. Archived on 17 Oct 2023.
  44. ^ "[PATCH] x86/cpu: Add two Intel CPU model numbers - Tony Luck". lore.kernel.org. Retrieved 2024-09-24.
  45. ^ InstLatX64, 72-Core Intel Xeon Phi 7290 CPUID dump
  46. ^ InstLatx64, 96-Core AMD Ryzen Threadripper Pro 7995WX CPUID dump
  47. ^ Intel Processor Identification and the CPUID Instruction (PDF), Intel, May 2002, archived from the original (PDF) on 2021-04-17
  48. ^ Linux 6.3 kernel sources, /arch/x86/include/asm/cpuid.h, line 69
  49. ^ gcc-patches mailing list, CPUID Patch for IDT Winchip, May 21, 2019
  50. ^ Geoff Chappell, CMPXCHG8B Support in the 32-Bit Windows Kernel, Jan 23, 2008. Archived on Jan 30, 2023.
  51. ^ AMD, AMD Processor Recognition Application Note, publication #20734, rev D, Jan 1997, page 13
  52. ^ 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.
  53. ^ Michal Necasek, SYSENTER, Where Are You?, OS/2 Museum, July 20, 2017
  54. ^ Intel, TDX module source code, v1.0.03.03, 22 Jun 2023, see src/common/helpers/smrrs.h. Archived on 20 Jan 2025.
  55. ^ Intel, Trust Domain CPU Architectural Extensions, order no. 343754-002, may 2021. Archived on 17 Dec 2024.
  56. ^ 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.
  57. ^ Geoff Chappell, ECX From CPUID Leaf 1, Jan 26, 2020. Archived on May 9, 2020.
  58. ^ 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.
  59. ^ Drepper, Ulrich (2007), What Every Programmer Should Know About Memory, CiteSeerX:10.1.1.91.957
  60. ^ a b Intel, 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.
  61. ^ Intel, AP-485, Processor Identification and the CPUID Instruction flag, rev 30, jan 2006, page 26
  62. ^ Michal Necasek, HTT Means Hyper-Threading, Right?, OS/2 Museum, dec 11, 2017
  63. ^ "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.
  64. ^ 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.
  65. ^ "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.
  66. ^ Intel SDM vol 2A, order no. 253666-053, Jan 2015, p. 244
  67. ^ a b Intel, Processor Identification and the CPUID Instruction Application Note 485, order no. 241618-037, Jan 2011, pages 31-32. Archived on 17 Oct 2023.
  68. ^ 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.
  69. ^ a b Intel, Processor Identification and the CPUID Instruction Application Note 485, order no. 241618-036, Aug 2009, page 26. Archived on 6 Oct 2023.
  70. ^ InstLatX64, Willamette-128 CPUID dump. Archived on 7 Dec 2019.
  71. ^ InstLatX64, Northwood-128 CPUID dump. Archived on 7 Dec 2019.
  72. ^ InstLatX64, Prescott-256 CPUID dump. Archived on 6 Dec 2019.
  73. ^ InstLatX64, Intel Tolapai CPUID dump. Archived on 19 Jan 2019.
  74. ^ 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.
  75. ^ 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.
  76. ^ InstlatX64, Intel Atom 230 CPUID dump. Archived on 7 Dec 2019.
  77. ^ WikiChip, Bonnell. Archived on 16 Jul 2017.
  78. ^ Cyrix, Cyrix CPU Detection Guide, rev 1.01, 2 Oct 1997, page 13.
  79. ^ CPU-World forum, Working Timna desktop 2023, page 2 - lists a CPUID dump from a Timna engineering sample. Archived on 9 Nov 2024.
  80. ^ Geoff Chappell, CPUID Leaf 2, 26 Jan 2020. Archived on Sep 4, 2023.
  81. ^ Intel, Itanium 2 Processor Reference Manual, order no. 251110-003, May 2004, page 192. Archived from the original on 7 Dec 2006.
  82. ^ 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.
  83. ^ Intel, Atom C3000 Processor Product Family Specification Update, order no. 336345-020, page 16, Mar 2023. Archived on 7 Oct 2023.
  84. ^ 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.
  85. ^ 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.
  86. ^ Intel, Xeon Processor 7500 Series Datasheet, order no. 323341-001, March 2010, page 150. Archived on Oct 8, 2023.
  87. ^ Intel, Optimization Reference Manual, volume 1, order no. 248966-049, jan 2024, chapter 9.6.3.3, p. 361. Archived on 19 Apr 2024.
  88. ^ Intel, Processor Identification and the CPUID Instruction, order no. 241618-031, sep 2006, page 32.
  89. ^ a b Shih Kuo (Jan 27, 2012). "Intel 64 Architecture Processor Topology Enumeration".
  90. ^ "Processor and Core Enumeration Using CPUID | AMD". Developer.amd.com. Archived from the original on 2014-07-14. Retrieved 2014-07-10.
  91. ^ "Sandybridge processors report incorrect core number?". Software.intel.com. 2012-12-29. Retrieved 2014-07-10.
  92. ^ "cpuid, __cpuidex". Msdn.microsoft.com. 2014-06-20. Retrieved 2014-07-10.
  93. ^ "x86 architecture - CPUID". sandpile.org. Retrieved 2014-07-10.
  94. ^ "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.
  95. ^ Hyper-Threading Technology and Multi-Core Processor Detection
  96. ^ Intel, Architecture Instruction Set Extensions Programming Reference, order no. 319433-052, March 2024, chapter 17. Archived on Apr 7, 2024.
  97. ^ Intel, Intel Processor Identification and the CPUID Instruction (AP-485, rev 30), order no. 241618-030, Jan 2006, page 19.
  98. ^ Intel, Intel 64 and IA-32 Architecture Software Developer's Manual, order no. 352462-079, volume 3B, section 15.4.4.4, page 3503
  99. ^ Intel, Processor Identification and the CPUID Instruction, order no. 241618-038, apr 2012, p.38
  100. ^ Intel, Product Change Notification 108701, 1 aug 2008. Archived on May 11, 2023
  101. ^ a b "Performance Monitoring Impact of Intel Transactional Synchronization Extension Memory Ordering Issue" (PDF). Intel. June 2023. p. 8. Retrieved 8 May 2024.
  102. ^ a b c Intel, 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.
  103. ^ Intel, Deprecating the PCOMMIT instruction, sep 12, 2016. Archived on Apr 23, 2023.
  104. ^ Intel, AVX512-FP16 Architecture Specification (PDF), document number 347407-001, June 2021. Archived on Oct 26, 2022
  105. ^ a b c d "Speculative Execution Side Channel Mitigations" (PDF). Revision 2.0. Intel. May 2018 [January 2018]. Document Number: 336996-002. Retrieved 2018-05-26.
  106. ^ "IBRS patch series [LWN.net]".
  107. ^ 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.
  108. ^ 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.
  109. ^ a b c Intel, Flexible Return and Event Delivery (FRED) Specification, rev 6.1, December 2023, order no. 346446-007, page 14. Archived on Dec 22, 2023.
  110. ^ 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.
  111. ^ 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.
  112. ^ a b Intel, Advanced Vector Extensions 10, rev 1.0, July 2023, order no. 355989-001. Archived on Jul 24, 2023.
  113. ^ a b Intel, Advanced Performance Extensions - Architecture Specification, rev 2.0, Aug 2023, order no. 355828-002, page 37. Archived on Sep 10, 2023.
  114. ^ Intel, Fast Store Forwarding Predictor, 8 Feb 2022. Archived on 6 Apr 2024.
  115. ^ a b c Intel, Branch History Injection and Intra-mode Branch Target Injection / CVE-2022-0001, CVE-2022-0002 / INTEL-SA-00598, 4 Aug 2022. Archived on 5 May 2023.
  116. ^ Intel, Return Stack Buffer Underflow / CVE-2022-29901, CVE-2022-28693 / INTEL-SA-00702, 12 Jul 2022. Archived on 13 Jul 2022.
  117. ^ Intel, Data Dependent Prefetcher, 10 Nov 2022. Archived on 4 Aug 2024.
  118. ^ Intel, MONITOR and UMONITOR Performance Guidance, 10 Jul 2024. Archived on 27 Nov 2024.
  119. ^ Intel, Asynchronous Enclave Exit Notify and the EDECCSSA User Leaf Function, 30 Jun 2022. Archived on 21 Nov 2022.
  120. ^ 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.
  121. ^ Intel, SDM Volume 3A, order no 253668-083, March 2024, chapter 11.5.4, page 408
  122. ^ instlatx64, Spreadtrum SC9853I-IA CPUID dump
  123. ^ Intel, Architecture Specification: Intel Trust Domain Extensions (Intel TDX) Module, order no. 344425-005, page 93, Feb 2023. Archived on 20 Jul 2023.
  124. ^ a b Intel, 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.
  125. ^ a b Microsoft, Hyper-V Feature and Interface Discovery, 8 Jul 2022. Archived on 18 Nov 2023.
  126. ^ Geoff Chappell, HV_HYPERVISOR_INTERFACE, 10 Dec 2022. Archived on 1 Feb 2023.
  127. ^ QEMU documentation, Hyper-V Enlightenments. Archived on 17 Apr 2024.
  128. ^ Linux 6.8.7 kernel source, /source/arch/x86/kvm/cpuid.c, lines 1482-1488
  129. ^ Linux kernel documentation, KVM CPUID bits. Archived on 22 Aug 2022.
  130. ^ Linux 6.8.7 kernel source, /arch/x86/kvm/hyperv.c, line 2793
  131. ^ Linux kernel documentation, Virtualization support: 4.118 KVM_GET_SUPPORTED_HV_CPUID. Archived on 26 Mar 2024.
  132. ^ FreeBSD commit 560d5ed, 28 Jun 2013, see file /sys/amd64/vmm/x86.c, line 48. Archived on 22 Apr 2024.
  133. ^ HyperKit source code, /src/lib/vmm/x86.c line 42, 8 May 2021.
  134. ^ Xen, CPUID Interface to Xen. Archived on 22 Apr 2024.
  135. ^ QEMU source code, fb/target/i386/cpu.c, line 6475, 18 Mar 2024.
  136. ^ VMWare, Mechanisms to determine if software is running in a VMware virtual machine, 1 May 2015. Archived on 18 Jun 2023.
  137. ^ Project ACRN, CPUID Virtualization, 20 Oct 2022. Archived on 25 Mar 2023.
  138. ^ VirtualBox documentation, 9.30 Paravirtualized Debugging. Archived on 22 Apr 2024.
  139. ^ QNX, Hypervisor - Checking the guest's environment, 25 Mar 2022. Archived on 22 Apr 2024.
  140. ^ NetBSD source code, /sys/dev/nvmm/x86/nvmm_x86_vmx.c, line 1430, 6 Nov 2023.
  141. ^ OpenBSD source code, /sys/arch/amd64/include/vmmvar.h, line 24, 9 Apr 2024.
  142. ^ Siemens Jailhouse hypervisor documentation, hypervisor-interfaces.txt, line 39, 27 Jan 2020. Archived on Jul 5, 2024.
  143. ^ Intel HAXM source code, /core/cpuid.c, line 979, 20 Jan 2023. Archived on 22 Apr 2024.
  144. ^ Intel KGT source code (trusty branch), /vmm/vmexit/vmexit_cpuid.c, lines 17-75, 15 May 2019
  145. ^ Linux kernel v5.18.19 source code, /source/drivers/visorbus/visorchipset.c, line 28
  146. ^ 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.
  147. ^ CPUID Specification, publication no.25481, rev 2.34 (PDF), AMD, September 2010, archived from the original (PDF) on 18 Aug 2022
  148. ^ Linux kernel source code
  149. ^ AMD, AMD-K6 Processor Data Sheet, order no. 20695H/0, march 1998, section 24.2, page 283
  150. ^ AMD, AMD-K6 Processor Revision Guide, order no. 21846H/0, June 1999, section 3.2.1, page 17
  151. ^ Intel, Intel 64 and IA-32 Architectures Software Developer's Manual, order no. 325462-079, march 2023, table 3-8 on page 3-238
  152. ^ Lightweight Profiling Specification (PDF), AMD, August 2010, archived from the original (PDF) on 2012-11-27, retrieved 2013-04-03
  153. ^ Cyrix, Cyrix CPU Detection Guide, rev 1.01, oct 2, 1997, page 12
  154. ^ AMD, Geode GX1 Processor Data Book, rev 5.0, december 2003, pages 202 and 226. Archived on 20 Apr 2020.
  155. ^ Transmeta, Processor Recognition, 2002-05-07, page 5
  156. ^ a b AMD, Processor Recognition Application Note, pub.no. 20734, rev. 3.13, december 2005. Section 2.2.2 (p.20) 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. Archived from the original on Jun 26, 2006.
  157. ^ AMD, Family 10h BKDG, document no. 31116, rev 3.62, jan 11, 2013, p. 388 - lists the NodeId bit. Archived on 16 Jan 2019.
  158. ^ AMD, AMD64 Architecture Programmer's Manual Volume 3, pub. no. 24594, rev 3.20, may 2013, page 579 - lists the StreamPerfMon bit
  159. ^ "Intel Processor Identification and the CPUID Instruction" (PDF). Download.intel.com. 2012-03-06. Retrieved 2013-04-11.
  160. ^ InstLatx64, Vortex86DX3 CPUID dump, 27 Sep 2021. Archived on 21 Oct 2021.
  161. ^ InstLatx64, AMD Ryzen 7 6800HS CPUID dump, 21 Feb 2022. Archived on 24 Mar 2023.
  162. ^ Chips and Cheese, Why you can't trust CPUID, 27 Oct 2022. Archived on 3 Nov 2022.
  163. ^ AMD, Geode LX Databook, pub.id. 33234H, Feb 2009, page 207.
  164. ^ InstLatx64, 2x 24-core Montage Jintide C2460 CPUID dump
  165. ^ InstLatx64, 2x 24-core Intel Xeon Platinum 8160 CPUID dump
  166. ^ InstLatx64, Zhaoxin KaiXian ZX-C+ C4580 CPUID dump
  167. ^ InstLatx64, VIA Eden X4 C4250 CPUID dump
  168. ^ Cyrix, Application Note 112: Cyrix CPU Detection Guide, page 17, 21 July 1998.
  169. ^ Instlatx64, VIA Cyrix III "Samuel" CPUID dump
  170. ^ AMD, BKDG for AMD Family 10h Processors, pub.no. 31116, rev 3.62, jan 11, 2013, page 392. Archived on 16 Jan 2019.
  171. ^ a b c d AMD, 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.
  172. ^ 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.
  173. ^ 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).
  174. ^ 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
  175. ^ AMD, AMD64 Virtualization Codenamed "Pacifica" Technology, publication no. 33047, rev 3.01, May 2005, appendix B, page 81. Archived on Jun 13, 2011.
  176. ^ AMD, CPUID specification, publication #25481, revision 2.18, jan 2006, page 18.
  177. ^ AMD, CPUID specification, publication #25481, revision 2.34, sep 2010, pages 5 and 11.
  178. ^ Instlatx64, AMD E-350 CPUID dump - has CPUID.(EAX=8000000A):EDX[9] set.
  179. ^ AMD, CPUID specification, publication #25481, revision 2.28, apr 2008, page 21.
  180. ^ AMD, CPUID specification, publication #25481, revision 2.34, sep 2010, page 5 - lists "SseIsa10Compat" as having been dropped in November 2009.
  181. ^ a b AMD, 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.
  182. ^ a b c AMD, Processor Programming Reference (PPR) for AMD Family 1Ah Model 24h, Revision B0 Processors, order no. 57254, rev 3.00, Sep 26, 2024, pages 102, 118, 119 and 199.
  183. ^ AMD, Secure VM Service Module for SEV-SNP Guests, pub.no #58019, rev 1.00, Jul 2023, page 13. Archived on 5 Aug 2023.
  184. ^ a b AMD, 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.
  185. ^ AMD, 5th Gen AMD EPYC Processor Architecture, First Edition, October 2024, page 9.
  186. ^ a b c d e AMD, Technical Update Regarding Speculative Return Stack Overflow, rev 2.0, feb 2024. Archived on Apr 12, 2024.
  187. ^ 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.
  188. ^ Sandpile, x86 architecture CPUID. Retrieved 22 December 2022.
  189. ^ instlatx64, CPUID dump of AMD A4-5000, lists "HELLO KITTY" string for CPUID leaf 8FFFFFFFh. Retrieved 22 December 2022.
  190. ^ IDT, WinChip 2B Processor Data Sheet, v0.9, April 1999, chapter 3.3.3, page 31.
  191. ^ VIA, PadLock Programming Guide rev. 1.66, aug 4, 2005, page 5. Archived from the original on May 26, 2010
  192. ^ OpenEuler 1.0 LTS kernel sources, /arch/x86/include/asm/cpufeatures.h lines 147-178. Archived on Jul 30, 2023.
  193. ^ VIA, C3 Nehemiah Processor Datasheet, rev 1.13, Sep 29, 2004, page 21
  194. ^ "GCC-mirror/GCC". GitHub. 13 March 2022.
  195. ^ "ARM Information Center". Infocenter.arm.com. Retrieved 2013-04-11.
  196. ^ "Processor version codes and SRM constants". Archived from the original on 2014-09-08. Retrieved 2014-09-08.
  197. ^ a b "IBM System z10 Enterprise Class Technical Guide" (PDF).
  198. ^ "MIPS32 Architecture For Programmers, Volume III: The MIPS32 Privileged Resource Architecture" (PDF). MIPS Technologies, Inc. 2001-03-12.
  199. ^ "PowerPC Operating Environment Architecture, book III" (PDF).
  200. ^ 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.
  • 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 Manual in 2013, but as of July 2014[update] 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 - collection of x86/x64 Instruction Latency, Memory Latency and CPUID dumps
Retrieved from "https://en.wikipedia.org/w/index.php?title=CPUID&oldid=1274269263#SSBD"