CPUID

CPUID

x86 아키텍처에서는 CPUID 명령(이 명령어는CPUID opcode)는 프로세서의 보충 명령(CPU IDentification에서 파생된 이름)으로 소프트웨어가 프로세서의 상세 내용을 검출할 수 있도록 합니다.인텔1993년 펜티엄과 SL 확장 486 [1]프로세서의 출시와 함께 도입했습니다.

프로그램에서는CPUID프로세서 타입과 MMX/SSE 등의 기능이 실장되어 있는지 여부를 확인합니다.

역사

가 일반에 공개되기 전에CPUID프로그래머는 프로세서 제조원과 [2][3]모델을 결정하기 위해 CPU 동작의 작은 차이를 이용하는 난해한 기계 코드를 작성합니다.80386 프로세서의 도입으로 리셋 시 EDX는 리비전을 나타냈지만 리셋 후 읽기만 가능하며 응용 프로그램에서 값을 읽을 수 있는 표준 방법은 없었습니다.

x86 패밀리를 제외하고 개발자들은 여전히 CPU 설계의 변화를 판단하기 위해 난해한 프로세스(명령 타이밍 또는 CPU 장애 트리거 포함)를 사용해야 합니다.

Motorola 680x0 패밀리에서는 CPUID 명령어를 전혀 사용하지 않았습니다.특정 명령어는 높은 특권을 필요로 합니다.이것들은, 다양한 CPU 패밀리를 구별하기 위해서 사용할 수 있습니다.Motorola 68010에서는 SR로부터의 MOVE 명령어가 특권이 되었습니다.이 주목할 만한 명령(및 스테이트 머신) 변경으로 68010은 PopekGoldberg 가상화 요건을 충족할 수 있었습니다.68000은 SR로부터의 특권이 없는 MOVE를 제공했기 때문에 CPU 에러 상태가 트리거되어 2개의 CPU를 구별할 수 있었습니다.

한편,CPUID명령어는 x86 아키텍처에 고유하며 (ARM과 같은) 다른 아키텍처는 종종 x86 CPUID 명령에서 제공되는 것과 동일한 종류의 정보를 얻기 위해 정해진 방법으로 읽을 수 있는 온칩 레지스터를 제공합니다.

CPUID를 호출

CPUIDopcode는0F A2.

어셈블리 언어에서는CPUID명령에는 파라미터가 없습니다.CPUID는 EAX 레지스터를 암묵적으로 사용하여 반환되는 정보의 주요 카테고리를 결정합니다.인텔의 최신 용어에서는 이것을 CPUID 리프라고 부릅니다. CPUID와 함께 전화해야 한다.EAX = 0첫 번째로 CPU가 구현하는 가장 높은 EAX 호출 파라미터(리프)가 EAX 레지스터에 저장되기 때문입니다.

확장 기능 정보를 얻으려면CPUIDEAX 세트의 최상위 비트를 사용하여 호출해야 합니다.가장 높은 확장 함수 호출 파라미터를 결정하려면 , 를 호출합니다.CPUID와 함께EAX = 80000000h.

CPUID는 모델 고유의 레지스터에 IA32_가 있는 경우에만 3보다 크지만80000000보다 작은 상태로 액세스 할 수 있습니다.MISC_ENABLE.BOOT_NT4 [ bit 22 ]= 0 (디폴트).이름에서 알 수 있듯이 SP6까지 Windows NT 4.0은 이 비트를 [4]설정하지 않으면 제대로 부팅되지 않지만 이후 버전의 Windows에서는 이 비트가 필요하지 않으므로 현재 Windows 시스템에서 4보다 큰 기본이 표시되는 것으로 가정할 수 있습니다.2014년 7월 현재, 기본 유효 잎은 최대 14시간까지 유지되지만, 일부 잎에서 반환된 정보는 공개 가능한 문서에 공개되지 않는다. 즉, "예약"되어 있다.

최근에 추가된 리프 중 일부는 CPUID를 호출하기 전에 ECX 레지스터를 통해 선택되는 서브리브도 있습니다.

EAX=0: 최고 기능 매개 변수 및 제조업체 ID

CPU의 제조원 ID 문자열(EBX, EDX, ECX에 저장된 12자 ASCII 문자열)이 반환됩니다.가장 높은 기본 콜 파라미터(콜하기 전에 EAX를 설정할 수 있는 최대값)CPUID)는 EAX로 반환됩니다.

프로세서 및 구현된 최고 기능의 목록을 다음에 나타냅니다.

최고 기능 파라미터
프로세서 기본의 확장된
이전 인텔 486 CPUID 미실장
최신 인텔 486 및 Pentium 0x01 미실장
Pentium Pro, Pentium II 및 Celeron 0x02 미실장
펜티엄 III 0x03 미실장
펜티엄 4 0x02 0x8000 0004
Xeon 0x02 0x8000 0004
펜티엄 M 0x02 0x8000 0004
하이퍼스레딩 지원 Pentium 4 0x05 0x8000 0008
Pentium D (8xx) 0x05 0x8000 0008
Pentium D (9xx) 0x06 0x8000 0008
코어 Duo 0x0A 0x8000 0008
Core 2 Duo 0x0A 0x8000 0008
Xeon 3000, 5100, 5200, 5300, 5400 (5000 시리즈) 0x0A 0x8000 0008
Core 2 Duo 8000 시리즈 0x0D 0x8000 0008
Xeon 5200, 5400 시리즈 0x0A 0x8000 0008
아톰 0x0A 0x8000 0008
Nehalem 기반 프로세서 0x0B 0x8000 0008
Ivy Bridge 기반 프로세서 0x0D 0x8000 0008
Skylake 기반 프로세서(프로세서 베이스 및 최대 freq; 버스 참조 freq) 0x16 0x8000 0008
System-On-Chip 벤더 속성 열거 메인 리프 0x17 0x8000 0008

프로세서 제조원의 ID 문자열은 다음과 같습니다.

오픈 소스 소프트 CPU 코어가 사용하는ID 문자열은 다음과 같습니다.

  • "MiSTer AO486"– ao486 CPU[5]
  • "GenuineIntel"– v586[6] core (인텔 ID 문자열과 동일)

다음은 가상 시스템의 알려진 ID 문자열입니다.

예를 들어 진품일 경우EBX에서 반환되는 Intel 프로세서 값은 0x756e6547, EDX는 0x49656e69, ECX는 0x6c65746e입니다.다음 코드는 x86-64 아키텍처용 GNU Assembler로 작성되어 있으며 벤더 ID 문자열과 CPU가 구현하는 최고 호출 파라미터를 표시합니다.

 .데이터.  s0: .asciz "CPUID: %x\n" s1: .asciz "실장된 최대 기본 함수 수: %i\n" s2: .asciz "벤더 ID: %.12s\n"   .본문   정렬 32  .글로벌 주된  메인:  푸시 %sqp  동작 %rsp,%sqp  서브큐 $16,%rsp   움직이다 $1,%eax  CPUid   리크 s0(%rip),%rdi  움직이다 %eax,%esi  xorl %eax,%eax  불러 인쇄물   푸시 %440x   xorl %eax,%eax  CPUid   움직이다 %ebx,8(%rsp)  움직이다 %edx,12(%rsp)  움직이다 %ecx,16(%rsp)    %440x   리크 s1(%rip),%rdi  움직이다 %eax,%esi  xorl %eax,%eax  불러 인쇄물   리크 s2(%rip),%rdi  동작 %rsp,%rsi  xorl %eax,%eax  불러 인쇄물   동작 %sqp,%rsp   %sqp // 재시도  움직이다 $1,%eax  인트 $0x80 

EAX=1: 프로세서 정보 및 기능 비트

이것에 의해, 레지스터 EAX(CPU의 시그니처라고도 불린다), 레지스터 EDX 및 ECX의 기능 플래그, 레지스터 EBX의 [9]추가 기능 정보가 반환됩니다.

프로세서 버전 정보
EAX
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
예약필 확장 패밀리 ID 확장 모델 ID 예약필 프로세서 타입 패밀리 아이디 모델 스테핑 아이디
  • 스테핑 ID는 고정된 에러타 또는 기타 변경으로 인해 할당된 제품 리비전 번호입니다.
  • 실제 프로세서 모델은 Model, Extended Model ID 및 Family ID 필드에서 파생됩니다.[ Family ID ]필드가 6 또는 15일 경우 모델은 왼쪽으로 4비트 이동된 확장 모델 ID 필드와 모델 필드의 합계와 동일합니다.그렇지 않으면 모형 필드 값과 동일합니다.
  • 실제 프로세서 패밀리는 [패밀리 ID(Family ID)]필드와 [확장 패밀리 ID(Extended Family ID)]필드에서 파생됩니다.[ Family ID ]필드가 15일 경우 패밀리는 [Extended Family ID]필드와 [Family ID]필드의 합계와 동일합니다.그렇지 않으면 패밀리는 패밀리 ID 필드의 값과 동일합니다.
  • [ Processor Type ](프로세서 타입) 필드의 의미는 다음 표에 나타나 있습니다.
프로세서 타입
유형 바이너리 부호화
OEM (Original Equipment Manufacturer) 프로세서 00
인텔 오버드라이브 프로세서 01
듀얼 프로세서 (Intel486 프로세서에는 적용되지 않습니다) 10
예약값 11
추가 정보
비트 EBX 유효한
7:0 브랜드 인덱스
15:8 CLFLUSH 회선 크기(값 * 8 = 캐시 회선 크기(바이트)) CLFLUSH 기능 플래그가 설정되어 있는 경우.

CPUID.01.EDX.CLFSH [비트 19]= 1

23:16 이 물리 패키지의 논리 프로세서의 주소 지정 가능한 최대 ID 수

이 값보다 작지 않은 가장 가까운 2승의 정수는 물리 패키지 내의 다른 논리 프로세서를 주소 지정하기 위해 예약된 고유한 초기 APIC ID 수입니다.

이전 용도:물리 프로세서당 논리 프로세서 수.하이퍼스레딩 [10]테크놀로지 탑재 Pentium 4 프로세서의 경우 2개.

하이퍼스레딩 기능 플래그가 설정되어 있는 경우.

CPUID.01.EDX.HTT [비트 28]= 1

31:24 로컬 APIC ID: 첫 번째 APIC-ID는 실행 중인 논리 프로세서를 식별하기 위해 사용됩니다.

CPUID 0BH 리프(CPUID.0Bh)를 통해서도 식별할 수 있습니다.EDX[x2APIC-ID]

Pentium 4 이후의 프로세서.

프로세서 정보 및 기능 플래그는 제조원에 따라 다르지만 일반적으로 Intel 값은 호환성을 위해 다른 제조원에 의해 사용됩니다.

기능 정보
조금 EDX ECX
짧다 특징 짧다 특징
0 fpu 온보드 x87 FPU sse3 Prescott 신규 지침 - SSE3 (PNI)
1 VME 가상 8086 모드 확장(VIF, VIP, PIV 등) pclmulqdq PCLMULQDQ
2 디버깅 확장 기능(CR4 비트 3) dtes64 64비트 디버깅스토어(edx 비트 21)
3 PSE 페이지 크기 확장 모니터 모니터 및 MWAIT 명령(SSE3)
4 TSC 타임스탬프 카운터 ds-cpl CPL 수식 디버깅스토어
5 메시지 모델 고유의 레지스터 vmx 가상 시스템 eXtensions
6 빠에 물리 주소 확장 스맥스 안전 모드 확장 (LaGrande)
7 MCE 기계 검사 예외 동부 표준시 확장 Speed Step
8 cx8 CMPXCHG8(비교 및 스왑) 명령 tm2 서멀 모니터 2
9 선단부 온보드 Advanced Programmable Interrupt Controller(프로그래밍 가능한 인터럽트 컨트롤러) sse3 추가 SSE3 지침
10 (표준) cnxt-id L1 컨텍스트 ID
11 세프 SYSENTER 및 SySEXIT 지침 소프트웨어 실리콘 디버깅인터페이스
12 mtrr 메모리 유형 범위 레지스터 fma 퓨전 다중 추가(FMA3)
13 pge CR4의 Page Global Enable 비트 cx16 CMPXCHG16B 명령
14 mca 머신 체크 아키텍처 xtpr 작업 우선순위 메시지 전송을 비활성화할 수 있습니다.
15 cmov 조건부 이동 및 FCMOV 지침 pdcm Perfmon 및 디버깅 기능
16 쓰다듬다 페이지 속성 테이블 (표준)
17 PSE-36 36비트 페이지 크기 확장 pcid 프로세스 컨텍스트 식별자(CR4 비트 17)
18 psn 프로세서의 시리얼 번호 DCA DMA[11][12] 쓰기를 위한 직접 캐시 액세스
19 clfsh CLFLUSH 명령(SSE2) sse 4.1 SSE 4.1의 순서
20 (표준) sse4.2 SSE4.2의 순서
21 ds 디버그 저장소: 실행된 점프의 추적 저장 x2apic x2APIC
22 acpi ACPI용 온보드 서멀 컨트롤 MSR 움직이다 MOVBE 명령(빅엔디안)
23 mmx MMX 명령 POPCNT 명령
24 fxsr FXSAVE, FXRESTOR 지침, CR4 비트 9 tsc-internal(tsc-interface) APIC는 TSC 마감 값을 사용하여 원샷 작업을 구현합니다.
25 sse SSE 지침(Katmai New Instruction AES AES 명령 세트
26 sse2 SSE2의 순서 저장 XSAVE, XRESTOR, XSETBV, XGETBV
27 ss CPU 캐시가 셀프 스누프 구현 저장 OS에 의한 XSAVE 지원
28 httd 하이퍼스레딩 avx 고급 벡터 확장
29 전송하다 온도 모니터는 자동으로 온도를 제한합니다. f16c F16C(반정밀) FP 기능
30 IA64 IA64 프로세서 에뮬레이트 x86 rdrd RDLAND(온칩 난수 생성기) 기능
31 빠베 Pending Break Enable(PBE#핀) 웨이크업 기능 하이퍼바이저 하이퍼바이저 존재(물리 CPU는 [13][14]항상 제로)

예약된 필드는 프로세서 식별을 위해 사용하기 전에 마스킹해야 합니다.

EAX=2: 캐시 및 TLB 기술자 정보

그러면 EAX, EBX, ECX 및 EDX 레지스터의 캐시 TLB 기능을 나타내는 기술자 목록이 반환됩니다.

EAX=3: 프로세서의 시리얼 번호

CPU의 시리얼 번호가 반환됩니다.프로세서의 시리얼 번호는 인텔 Pentium III에서 도입되었지만 프라이버시 문제로 인해 이 기능은 이후 모델에서는 구현되지 않습니다(PSN 기능 비트는 항상 지워집니다).트랜스메타의 에피세온과 크루소 프로세서도 이 기능을 제공합니다.단, AMD CPU는 어떤 CPU 모델에서도 이 기능을 구현하지 않습니다.

인텔 Pentium III CPU 의 경우, 시리얼 번호는 EDX 로 반환됩니다.ECX 레지스터Transmeta Efficeon CPU의 경우 EBX로 반환됩니다.EAX 레지스터트랜스메타 크루소 CPU의 경우 EBX 레지스터에만 반환됩니다.

기능하려면 , BIOS 설정에서 프로세서의 시리얼 번호 기능이 유효하게 되어 있을 필요가 있습니다.

EAX=4 및 EAX=Facebook: 인텔 스레드/코어/캐시 토폴로지

이들 2개의 리프는 인텔 멀티코어([15]및 하이퍼스레드) 프로세서의 프로세서토폴로지(스레드, 코어, 패키지) 및 캐시 계층 열거에 사용됩니다.2013년 현재 AMD는 이러한 Leave를 사용하지 않지만 핵심 [16]열거를 수행하는 다른 방법이 있습니다.

다른 대부분의 CPUID Leave와 달리 리프 Bh는 CPUID 명령이 실행하는 논리 프로세서에 따라 EDX에서 다른 값을 반환합니다.EDX에서 반환되는 값은 실제로는 논리 프로세서의 x2APIC ID입니다.단, x2APIC ID 공간이 논리 프로세서에 연속적으로 매핑되는 것은 아닙니다.매핑에 공백이 있을 수 있습니다.즉, 일부 중간 x2APIC ID가 논리 프로세서에 반드시 대응하고 있는 것은 아닙니다.x2APIC ID를 코어에 매핑하기 위한 추가 정보는 다른 레지스터에 제공됩니다.리프 Bh에는 서브리브(아래 설명에 따라 ECX에 의해 선택됨)가 있지만 EDX에서 반환되는 값은 명령이 실행되고 있는 논리 프로세서의 영향을 받을 뿐 서브리브의 영향을 받지 않습니다.

리프 Bh에 의해 공개되는 프로세서토폴로지는 계층형이지만, 이 계층의 (논리적인) 수준의 순서가 반드시 물리 계층(SMT/코어/패키지)의 순서와 일치하는 것은 아니라는 이상한 경고가 있습니다.단, 모든 논리 레벨은 SMT, core 또는 invalid인 "level type"에 대응하는 ECX 서브블라프(Bh 리프)로 쿼리할 수 있습니다.level id 공간은 0부터 시작하여 연속적입니다.즉, level id가 비활성화되면 상위 레벨의 ID도 모두 비활성화됩니다.레벨 타입은 ECX의 비트15:08로 반환되며 쿼리된 레벨의 논리 프로세서의 수는 EBX로 반환됩니다.마지막으로 이들 레벨과 x2APIC ID 간의 접속은 다음 레벨에서 하나의 ID를 얻기 위해 x2APIC ID를 이행해야 하는 비트 수로 EAX[4:0]로 반환됩니다.

예를 들어 하이퍼스레딩이 가능한 듀얼코어 Westmere 프로세서(따라서 총 2개의 코어와 4개의 스레드 포함)는 4개의 논리 프로세서에 대해 x2APIC ID 0, 1, 4, 5를 가질 수 있습니다.예를 들어 CPUID의 리프 Bh(=EAX)와 서브블라프 0(=ECX)은 ECX에서 100h를 반환할 수 있습니다. 즉, 레벨 0은 물리적 코어당 두 개의 논리 프로세서(SMT 단위)가 있으므로 SMT(스레딩) 계층을 설명하고 EBX에서 2를 반환할 수 있습니다.이 경우 EAX에서 반환되는 값은 1이어야 합니다.이는 전술한 x2APIC ID를 오른쪽으로1비트 이동하면 (레벨 ID 계층의 다음 레벨에서) 하나의 코어 번호가 부여되고 각 코어 내의 SMT ID 비트가 지워지기 때문입니다.이 정보를 해석하는 보다 간단한 방법은 이 예에서 x2APIC ID의 마지막 비트(비트 번호0)가 각 코어 내의 SMT/하이퍼스레딩 유닛을 식별하는 것입니다.서브블레프 1로 진행하면(EAX=Superval 및 ECX=1을 사용하여 CPUID에 다시 콜을 발신함으로써) ECX에서는 201h를 반환하고 EBX에서는 4를 반환할 수 있습니다.이는 패키지 내에 4개의 논리 프로세서가 있기 때문입니다.EAX는 비트 번호를 식별하기 위해3보다 큰 값을 반환할 수 있기 때문입니다.x2APIC 아이디이 예에서는 x2APIC ID의 비트 번호1은 사용되지 않습니다.그러나 이 레벨에서 반환되는 EAX는 4비트(Clarkdale Core i3 5x0)일 수 있습니다.이는 x2APIC ID를 4비트 이동 시 패키지 레벨(=0)에서도 고유 ID를 제공하기 때문입니다.마지막으로, EAX=4 리프에서 아직 파악하지 못한 내용이 무엇인지 궁금할 수 있습니다.EAX[31:26]에서는 패키지용으로 예약된APIC 마스크비트를 반환합니다.이 예에서는 비트0 ~ 2가 이 패키지 내에서 논리 프로세서를 식별하기 위해 사용되지만 비트1도 논리 프로세서 식별 스킴의 일부로 사용되지 않지만 예약되어 있습니다.즉, APIC ID 0 ~7은 패키지용으로 예약되어 있지만 이들 값의 절반은 논리 프로세서에 매핑되지 않습니다.

프로세서의 캐시 계층은 리프 4의 서브리브를 통해 조사됩니다.APIC ID는 시만텍 장치 및 코어가 서로 다른 수준의 캐시를 공유하는 방법에 대한 정보를 전달하기 위해 이 계층에서도 사용됩니다.이 예에서 설명하자면, Westmere의 물리적 코어 간에 공유되지 않고 동일한 코어의 SMT 유닛에 의해 공유되는 L2 캐시는 EAX[26:14]가 1로 설정되어 있는 반면, L3 캐시가 전체 패키지에 의해 공유된다는 정보는 이러한 비트를 (적어도) 111b로 설정함으로써 표시됩니다.캐시 유형, 크기 및 연관성을 포함한 캐시 세부 정보는 리프 4의 다른 레지스터를 통해 전달됩니다.

는 인텔 앱 메모 485명의 이전 버전의, 그리고 계속 늘어나고 있는 멀티 코어 프로세서에 코어를 확인하는데 존경과 별로, 심지어, VisualStudio,[18]해당하는 2013년판도cpuid을 사용할 수 있는 마이크로 소프트 샘플 코드에 포함되었다 이 정보를 해석하여에서 일부 잘못된 정보[17]문제가 있는 조심하라.d도 나는n CPUID에 [19]관한 sandpile.org 페이지입니다만, 프로세서[15] 토폴로지를 특정하기 위한 인텔 코드 샘플은 올바른 해석이며, 현재의 인텔 소프트웨어 개발자 매뉴얼은 보다 명확한 언어를 사용하고 있습니다.또한 Wildfire Games의 (오픈 소스) 크로스 플랫폼 프로덕션[20] 코드도 인텔 문서를 올바르게 해석하고 있습니다.

x2APIC가 없는 구형(2010년 이전) 인텔 프로세서와 관련된 토폴로지 검출 예는 2010년 인텔 [21]프레젠테이션에 기재되어 있습니다.2010년 이후의 인텔 프로세서에서 이 오래된 검출 방법을 사용하면 코어 수와 논리 프로세서의 수가 과대평가될 수 있습니다.이러한 검출 방법은 APIC ID 공간에 공백이 없다고 가정하고 있으며, 일부 최신 프로세서(Core i3 5x0 시리즈 이후)에 의해 이 가정이 위반되고 있기 때문입니다.o x2APIC와 함께 제공되기 때문에 EAX=Latrix 리프 방법을 사용하여 토폴로지를 올바르게 판단할 수 있습니다.

EAX=6: 온도 및 전원 관리

그러면 EAX, EBX, ECX 레지스터의 기능 플래그가 반환됩니다.

EAX
비트 특징
0 디지털 열센서(DTS) 기능
1 인텔 터보 부스트 테크놀로지 기능
2 상시 실행 APIC 타이머(ARAT) 기능
3 (표준)
4 전력 제한 알림(PLN) 기능
5 확장 클럭 변조 듀티(ECMD) 기능
6 패키지 열관리(PTM) 기능
31:7 (표준)
EBX
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
인터럽트 임계값 수 (표준)
ECX
비트 특징
0 하드웨어 조정 피드백 기능
1 ACNT2의 기능
2 (표준)
3 퍼포먼스 - 에너지 바이어스 기능
31:4 (표준)

EAX=7, ECX=0: 확장 기능

EBX, ECX 및 EDX의 확장 기능 플래그를 반환합니다. EAX=7의 최대 ECX 값을 EAX에서 반환합니다.

EAX=7,ECX=0 CPUID 기능 비트
조금 EBX ECX EDX
짧다 특징 짧다 특징 짧다 특징
0 fsgs 베이스 %fs 및 %gs의 베이스에 대한 액세스 프리페치1 PREFETCHWT1 명령어 (표준)
1 IA32_TSC_ADJUST avx440_vbmi AVX-512 벡터비트 조작 순서 (표준)
2 sgx 소프트웨어 가드 확장 우미프 사용자 모드 명령 방지 avx440_4vniw AVX-512 4 레지스터 뉴럴 네트워크 명령
3 bmi1 비트 조작 명령 세트1 pku 사용자 모드 페이지의 메모리 보호 키 avx440_4fmaps AVX-512 4 레지스터 누적 단정도
4 할레 TSX 하드웨어 잠금 기능 ospke OS에 의한 PKU 활성화 fsrm 고속 쇼트 REP MOVSB
5 avx2 고급 벡터 확장 2 waitpkg 일시정지 시간 및 사용자 수준 모니터/대기 시간 동작하다 사용자 인터프로세서 인터럽트
6 FDP_EXPTN_ONLY avx440_vbmi2 AVX-512 벡터비트 조작 순서 2 (표준)
7 스매프 슈퍼바이저 모드 실행 방지 cet_ss Control Flow Enforcement(CET; 제어 흐름 적용) 섀도 스택
8 bmi2 비트 조작 명령 세트 2 gfni Galois 필드 명령 avxsyslog_vp2syslog AVX-512 VP2INTERSCT 더블워드 및 쿼드워드 명령어
9 어름 확장 REP MOVSB/STOSB 베인 벡터 AES 명령어세트(VEX-256/EVEX) SRBDS_CTRL 특수 레지스터 버퍼 데이터 샘플링 완화
10 인식되지 않다 INVPCID 명령 vpclmulqdq CLMUL 명령어세트(VEX-256/EVEX) md_clear VERW 명령은 CPU 버퍼를 클리어합니다.
11 rtm TSX 제한 트랜잭션 메모리 avxvni_vni AVX-512 벡터 뉴럴 네트워크 명령 RTM_Always_ABORT 모든 TSX 트랜잭션이 중단됩니다.
12 pqm 플랫폼 서비스 품질 모니터링 avxsec_bitalg AVX-512 BITALG 명령 (표준)
13 FPU CS 및 FPU DS는 권장되지 않음 TME_EN IA32_TME 관련 MSR 지원 TSX_FORCE_ABORT TSX_FORCE_ABORT MSR 사용 가능
14 mpx 인텔 MPX (메모리 프로텍션 익스텐션) avxsec_vpopcntdq AVX-512 벡터 모집단 수 더블 워드 및 쿼드 워드 시리얼라이즈 명령 실행 직렬화
15 pqe 플랫폼 서비스 품질(QoS(Quality of Service) (표준) 하이브리드 프로세서 토폴로지에서의 CPU 타입의 혼재
16 avxsyslog_f AVX-512 기초 5레벨 페이징 TSXLDTRK TSX 서스펜드로드 어드레스 트래킹
17 avxsyslog_dq AVX-512 더블워드 및 쿼드워드 명령 마우 64비트 모드의 BNDLDX 및 BNDSTX Intel MPX 명령에서 사용되는 사용자 공간 MPX 주소 폭 조정 값 (표준)
18 시드 RDSEED 명령 구성 플랫폼 설정(메모리 암호화 테크놀로지 명령)
19 adx 인텔 ADX (멀티프레시젼 애드캐리 명령 확장) lbr 아키텍처의 최신 브랜치 레코드
20 탁탁 치다 슈퍼바이저 모드접근 방지 cet_ibt Control Flow Enforcement(CET; 제어 플로우 적용) 간접 브랜치
21 avxfil_ifma AVX-512 정수 퓨전 다중 추가 명령 (표준)
22 커밋 PCOMMIT 명령 rdpid CPU ID 및 IA32_를 확인.TSC_AUX amx-bf16 bfloat16 번호의 타일 계산
23 클루쇼트 CLFLUSHOPT 명령 KL 키 로커 AVX512_FP16 AVX512-FP16의 반정밀 부동소수점 명령[22]
24 크러브 CLWB 명령 (표준) 암스의 매개에 의한 타일 아키텍처
25 intel_pt 인텔 프로세서 트레이스 컴퓨터 캐시 라인 강등 amx-int8 8비트 정수의 타일 계산
26 avxsyslog_pf AVX-512 프리페치 순서 (표준) IBRS_IBPB/spec_ctrl 투기 제어, 간접 분기 제어(IBC)의 일부:
Interact Branch Restricted Specision(IBRS) 및
간접 분기 예측 장벽(IBPB)[23][24]
27 avxsyslog_er AVX-512 지수 및 역수 명령 이동 스틱 IBC의[23] 일부인 단일 스레드 간접 브랜치 프레딕터
28 avxsyslog_cd AVX-512 컨플릭트 검출 순서 MOVDIR64B L1D_FLUSH IA32_FLUSH_CMD MSR
29 인텔 SHA 확장 기능 ENQCMD 엔큐 스토어 IA32_ARCH_기능 투기적인 사이드 채널 완화[23]
30 avxfil_bw AVX-512 바이트 및 Word 명령어 sgx_lc SGX 기동 설정 IA32_CORE_기능 모델 고유의 핵심 기능을 나열한 MSR 지원
31 avxsyslog_syslogs AVX-512 벡터 길이 확장 pks 슈퍼바이저 모드페이지의 보호 키 ssbd 투기적 스토어 바이패스(IA32_SPEC_CTRL)를 완화하기 위한 투기적 스토어 바이패스 [23]비활성화

EAX=7, ECX=1: 확장 기능

그러면 EAX의 확장 기능 플래그가 반환됩니다.

EAX=7, ECX=1 CPUID 기능 비트
조금 EAX
짧다 특징
0 (표준)
1 (표준)
2 (표준)
3 (표준)
4 avx_vni AVX 벡터 뉴럴 네트워크 명령(VEX 부호화)
5 avx440_bf16 AVX-512 BFLOAT16 명령
6 (표준)
7 (표준)
8 (표준)
9 (표준)
10 fast_zero_rep_movsb ?
11 fast_short_rep_stosb ?
12 fast_short_rep_cmpsb_scasb ?
13 (표준)
14 (표준)
15 (표준)
16 (표준)
17 프래드 유연한 반품 및 이벤트 제공
18 인식하다 LKGS설명
19 (표준)
20 (표준)
21 (표준)
22 리셋 HRESET명령 및 관련 MSR
23 (표준)
24 (표준)
25 (표준)
26 (표준)
27 (표준)
28 (표준)
29 (표준)
30 (표준)
31 (표준)

EAX=0Dh, ECX=1

EAX=0Dh, ECX=1 CPUID 기능 비트
조금 EAX
짧다 특징
0 xsaveopt XSAVEOPT설명
1 저장 XSAVEC설명
2 xgetbv_ecx1 XGETBV와 함께ECX=1지지하다
3 xss XSAVES그리고.XRSTORS지침들
4 (표준)
5 (표준)
6 (표준)
7 (표준)
8 (표준)
9 (표준)
10 (표준)
11 (표준)
12 (표준)
13 (표준)
14 (표준)
15 (표준)
16 (표준)
17 (표준)
18 (표준)
19 (표준)
20 (표준)
21 (표준)
22 (표준)
23 (표준)
24 (표준)
25 (표준)
26 (표준)
27 (표준)
28 (표준)
29 (표준)
30 (표준)
31 (표준)

EAX=12h, ECX=0: SGX 리프 함수

EAX=0Dh, ECX=1 CPUID 기능 비트
조금 EAX
짧다 특징
0 sgx1 SGX1 리프 함수
1 sgx2 SGX2 리프 함수
2 (표준)
3 (표준)
4 (표준)
5 os ENCLV탈퇴:EINCVIRTCHILD,EDECVIRTCHILD,그리고.ESETCONTEXT
6 ? ENCLS탈퇴:ETRACKC,ERDINFO,ELDBC,ELDUC
7 (표준)
8 (표준)
9 (표준)
10 (표준)
11 (표준)
12 (표준)
13 (표준)
14 (표준)
15 (표준)
16 (표준)
17 (표준)
18 (표준)
19 (표준)
20 (표준)
21 (표준)
22 (표준)
23 (표준)
24 (표준)
25 (표준)
26 (표준)
27 (표준)
28 (표준)
29 (표준)
30 (표준)
31 (표준)


EAX=14h, ECX=0

EAX=14h, ECX=0 CPUID 기능 비트
조금 EBX
짧다 특징
0 (표준)
1 (표준)
2 (표준)
3 (표준)
4 기입하다 ?
5 (표준)
6 (표준)
7 (표준)
8 (표준)
9 (표준)
10 (표준)
11 (표준)
12 (표준)
13 (표준)
14 (표준)
15 (표준)
16 (표준)
17 (표준)
18 (표준)
19 (표준)
20 (표준)
21 (표준)
22 (표준)
23 (표준)
24 (표준)
25 (표준)
26 (표준)
27 (표준)
28 (표준)
29 (표준)
30 (표준)
31 (표준)


EAX=19h

EAX=19h CPUID 피처 비트
조금 EBX
짧다 특징
0 aes_module AES "Key Locker" 명령어
1 (표준)
2 aes_wide_module AES의 "와이드 키 로커" 절차
3 (표준)
4 kl_msrs '키 락커' MSR
5 (표준)
6 (표준)
7 (표준)
8 (표준)
9 (표준)
10 (표준)
11 (표준)
12 (표준)
13 (표준)
14 (표준)
15 (표준)
16 (표준)
17 (표준)
18 (표준)
19 (표준)
20 (표준)
21 (표준)
22 (표준)
23 (표준)
24 (표준)
25 (표준)
26 (표준)
27 (표준)
28 (표준)
29 (표준)
30 (표준)
31 (표준)

EAX=80000000h: 최고의 확장 기능 구현

가장 높은 콜 파라미터는 EAX로 반환됩니다.

EAX=80000001h: 확장 프로세서 정보와 기능 비트

그러면 EDX 및 ECX 확장 기능 플래그가 반환됩니다.비트 0 ~ 9, 12 ~17, 23 및 24EDX의 복제품입니다.EDX에서EAX=1잎사귀

AMD 기능 플래그는 다음과 같습니다.[25][26]

EAX=80000001h CPUID 기능 비트
조금 EDX ECX
짧다 특징 짧다 특징
0 fpu 온보드 x87 FPU lahf_lm 롱 모드의 LAHF/SAHF
1 VME 가상 모드 확장(VIF) cmp_mp_maps(CMP_displaces) 하이퍼스레딩이 유효하지 않습니다.
2 디버깅 확장 기능(CR4 비트 3) svm 가상 머신의 보안
3 PSE 페이지 크기 확장 부족. 확장 APIC 공간
4 TSC 타임스탬프 카운터 cr8_module 32비트 모드의 CR8
5 메시지 모델 고유의 레지스터 수갑을 채우다 고도의 비트 조작(lzcntpopcnt)
6 빠에 물리 주소 확장 sse4a SSE4a
7 MCE 기계 검사 예외 잘못 정렬하다 잘못 정렬된 SSE 모드
8 cx8 CMPXCHG8(비교 및 스왑) 명령 3노우페치 PREFETCH 및 PREFETCHW 명령
9 선단부 온보드 Advanced Programmable Interrupt Controller(프로그래밍 가능한 인터럽트 컨트롤러) 동작 OS 표시 회피책
10 (표준) ibs 명령 기반 샘플링
11 시스템 SYSCALL 및 SYSRET 명령 xop XOP 명령 세트
12 mtrr 메모리 유형 범위 레지스터 스키니트 SKINIT/STGI 지침
13 pge CR4의 Page Global Enable 비트 wdt 워치독 타이머
14 mca 머신 체크 아키텍처 (표준)
15 cmov 조건부 이동 및 FCMOV 지침 lwp 경량[27] 프로파일링
16 쓰다듬다 페이지 속성 테이블 fma4 피연산자 4개 융합 다중 가산
17 pse36 36비트 페이지 크기 확장 동작하다 변환 캐시 확장
18 (표준)
19 mp 멀티프로세서 지원 nodeid_msr 노드 ID MSR
20 nx NX 비트 (표준)
21 (표준) tbm 후행 비트 조작
22 mmxext 확장 MMX 토포텍스트 토폴로지 확장
23 mmx MMX 명령 perfctr_core 핵심 성능 카운터 확장
24 fxsr FXSAVE, FXRSTOR 명령, CR4 비트9 perfctr_nb NB 퍼포먼스카운터 확장
25 fxsr_opt FXSAVE/FXRSTOR 최적화 (표준)
26 pdpe1gb 기가바이트 페이지 dbx 데이터 중단점 확장
27 rdtscp RDTSCP 명령 퍼프트스크 퍼포먼스 TSC
28 (표준) pcx_l2i L2I 성능 카운터 확장
29 lm 롱 모드 모니터 MONITORX그리고.MWAITX지침들
30 3dnowext 확장 3DNow! addr_mask_ext ?
31 3dnow 3DNow! (표준)

EAX=800002h,80000003h,80000004h:프로세서 브랜드 문자열

EAX, EBX, ECX 및 EDX의 프로세서 브랜드 문자열을 반환합니다.CPUID는 48바이트의 늘 종단 ASCII 프로세서브랜드 [28]스트링 전체를 취득하려면 각 파라미터를 순서대로 발행해야 합니다.이 기능이 CPU에 존재하는지 여부를 확인하려면CPUID와 함께EAX = 80000000h먼저 반환된 값이 80000004h 이상인지 확인합니다.

#실패하다 <cpuid.h>// GCC 제공 #실패하다 <stdio.h> #실패하다 < stdint >h>  인트 주된(무효) {     uint32_t 브랜드.[12];      한다면 (!__get_cpuid_max(0x80000004, 특수한 순서)) {         인쇄(하드, "기능이 구현되지 않았습니다.");         돌아가다 2;     }      __get_cpuid(0x80000002, 브랜드.+0x0, 브랜드.+0x1, 브랜드.+0x2, 브랜드.+0x3);     __get_cpuid(0x80000003, 브랜드.+0x4, 브랜드.+0x5, 브랜드.+0x6, 브랜드.+0x7);     __get_cpuid(0x80000004, 브랜드.+0x8, 브랜드.+0x9, 브랜드.+0xa, 브랜드.+0xb);     인쇄물("브랜드: %s\n", 브랜드.); } 

EAX=80000005h: L1 캐시 및 TLB 식별자

이 함수는 프로세서의 L1 캐시와 TLB 특성을 포함합니다.

EAX=80000006h: 확장 L2 캐시 기능

바이트 단위의 L2 캐시(비트 07 ~ 00), 연관성 유형(4비트필드로 인코딩, 비트 15 ~12), 캐시 크기(비트 31 ~16) 등 ECX의 L2 캐시에 대한 세부 정보를 반환합니다.

#실패하다 <cpuid.h>// GCC 제공 #실패하다 <stdio.h> #실패하다 < stdint >h>  인트 주된(무효) {     uint32_t 이액스, ebx, ecx, 엣지;     한다면 (__get_cpuid(0x80000006, &이액스, &ebx, &ecx, &엣지)) {         인쇄물("회선 크기: %d B, Assoc.유형: %d; 캐시 크기: %dKB.\n", ecx & 0xff, (ecx >> 12) & 0x07, (ecx >> 16) & 0xffff);         돌아가다 0;     } 또 다른 {         출력("CPU는 0x80000006을 지원하지 않습니다.", 하드);         돌아가다 2;     } } 

EAX=80000007h: 고도의 전원 관리 정보

이 기능은 고급 전원 관리 기능 식별자를 제공합니다.EDX 비트8은 불변 TSC의 지원을 나타냅니다.

EAX=80000008h: 가상 및 물리 주소 크기

EAX=80000008h CPUID 기능 비트
조금 EAX EBX ECX
짧다 특징
0 물리 주소 비트 수 제로 CLZERO설명 물리 코어 수(1개 제외)
1 폐기_instr 폐기된 명령 수 MSR
2 xrstor_fp_err XRSTORFP 오류를 복원합니다.
3 인볼피 INVLPGB그리고.TLBSYNC지침들
4 rdpru RDPRU설명
5 (표준)
6 (표준)
7 (표준)
8 선형 주소 비트 수 커밋 MCOMMIT설명 (표준)
9 wbnoinvd WBNOINVD설명
10 (표준)
11 (표준)
12 IBPB 간접 분기 예측 장벽 최대2 APIC ID 로그
13 wbinvd_int WBINVD그리고.WBNOINVD인터럽트 가능
14 ibrs IBRS(AMD)
15 single_contract_ibp 싱글 스레드 IBP
16 (표준) (표준) 성능 타임스탬프 카운터 크기
17 single_buff_ibp_ao 상시 싱글 스레드 IBP
18 (표준) (표준)
19 (표준)
20 no_efer_lmsle EFER.LMSLE지원되지 않습니다.
21 invlpgb_module INVLPGB중첩된 페이지 지원
22 (표준)
23 ?
24 ssbd ?
25 virt_ssbd ?
26 ssb_no ?
27 (표준)
28 (표준)
29 (표준)
30 (표준)
31 (표준)

EDX 는, 31 ~16 의 RDPRU(허용되는 최대 레지스터 ID)에 고유의 정보를 제공합니다.현재 Zen 2의 숫자는 MPERF 및 APERF의 경우 1입니다.


EAX=8000001Fh

EAX=8000001
조금 EAX
짧다 특징
0 스메 안전한 메모리 암호화
1 7개 안전한 암호화 가상화
2 page_interface 페이지 플래시 MSR
3 7개 SEV 암호화 상태
4 sev_snp SEC 시큐어 네스트 페이징
5 vmpl VM 권한 수준
6 (표준)
7 (표준)
8 (표준)
9 (표준)
10 hw_cache_코히렌시 ?
11 64_호스트 ?
12 restricted_module(제한됨) ?
13 alternate_displaces ?
14 debug_module ?
15 prevent_host_ibs ?
16 비디오 가상 투과 암호화
17 (표준)
18 (표준)
19 (표준)
20 (표준)
21 (표준)
22 (표준)
23 (표준)
24 (표준)
25 (표준)
26 (표준)
27 (표준)
28 (표준)
29 (표준)
30 (표준)
31 (표준)

EAX=8FFFFH: AMD 이스터 에그

AMD K7 및 K8 CPU에 한정하여 문자열 " "을 반환합니다.EAX, EBX, ECX 및 EDX의 [29]IT's HAMMER TIME"은 MC 해머의 곡 U Can't Touch This를 참조한 것입니다.

고급 언어에서의 CPUID 사용률

인라인 어셈블리

이 정보는 다른 언어에서도 쉽게 접근할 수 있습니다.예를 들어, 다음 gcc의 C 코드는 cpuid에 의해 반환된 첫 번째 5개의 값을 출력합니다.

#실패하다 <stdio.h>  /* 이 기능은 32비트 및 64비트 시스템에서 작동합니다.『인라인 어셈블리 번호』 참조[In real compiler] (실제 컴파일러)를 참조해 주세요.*/ 인트 주된() {   /* 4개의 레지스터는 프로세서가 쓰기 때문에 초기화할 필요가 없습니다.*/   인트 인포타이프, a, b, c, d;    위해서 (인포타이프 = 0; 인포타이프 < > 5; 인포타이프 ++)   {     __asm__("cpuid"             : "=a" (a), "=b" (b), "=c" (c), "=d" (d)   // 출력 변수.EAX -> a 및 그 반대도 마찬가지입니다.             : "0" (인포타이프));                         // 인포타이프를 EAX에 넣습니다.     인쇄물 ("정보 유형 %x\nEAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n", 인포타이프, a, b, c, d);   }    돌아가다 0; } 

MSVC 및 Borland/Embarcadero C 컴파일러(bcc32) 플레이버 인라인어셈블리에서 클로버링 정보는 다음 명령에서 암묵적으로 나타납니다.

#실패하다 <stdio.h> 인트 주된() {   서명되어 있지 않다 인트 정보 유형 = 0;   서명되어 있지 않다 인트 a, b, c, d;   __asm {     /* 콜을 실시합니다.*/     움직이다 EAX, 정보 유형;     CPUid;     /* 결과를 저장합니다.*/     움직이다 a, EAX;     움직이다 b, EBX;     움직이다 c, ECX;     움직이다 d, EDX;   }   인쇄물 ("정보 유형 %x\nEAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n", 정보 유형, a, b, c, d);   돌아가다 0; } 

어느 하나의 버전이 플레인어셈블리 언어로 기술되어 있는 경우 프로그래머는 값을 계속 사용하려면 EAX, EBX, ECX 및 EDX의 결과를 다른 곳에 수동으로 저장해야 합니다.

래퍼 기능

또한 GCC는 다음과 같은 헤더를 제공합니다.<cpuid.h>CPUID가 있는 시스템에서 사용합니다.__cpuid는 인라인 어셈블리로 확장되는 매크로입니다.일반적인 사용법은 다음과 같습니다.

#실패하다 <cpuid.h> #실패하다 <stdio.h>  인트 주된 (무효) {   인트 a, b, c, d;   __cpuid (0 /* 벤더 문자열 */, a, b, c, d);   인쇄물 ("EAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n", a, b, c, d);   돌아가다 0; } 

단, 이 CPU에 존재하지 않는 확장기능을 요구해도 이를 인식하지 못하고 랜덤으로 예기치 않은 결과를 얻을 수 있습니다.보다 안전한 버전은 에도 제공되고 있습니다.<cpuid.h>확장기능을 체크하고 안전성 검사를 몇 가지 더 수행합니다.출력 값은 참조와 유사한 매크로 매개 변수를 사용하여 전달되지 않지만 보다 일반적인 포인터를 사용하여 전달됩니다.

#실패하다 <cpuid.h> #실패하다 <stdio.h>  인트 주된 (무효) {   인트 a, b, c, d;   한다면 (!__get_cpuid (0x81234567 /*는 존재하지 않지만 존재한다고 가정합니다*/, &a, &b, &c, &d))     {       인쇄 (하드, "경고: CPUID 요청 0x81234567이 잘못되었습니다!\n");     }   인쇄물("EAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n", a, b, c, d);   돌아가다 0; } 

의 앰퍼샌드에 주의해 주세요.&a, &b, &c, &d조건문도 있습니다.이 경우,__get_cpuid콜이 올바른 요구를 수신하면 제로 이외의 값이 반환됩니다.실패하면 제로입니다.[30]

Microsoft Visual C 컴파일러에는 내장 함수가 있습니다.__cpuid()따라서 인라인어셈블리를 사용하지 않고 cpuid 명령을 삽입할 수 있습니다.이것은 x86-64 버전의 MSVC에서는 인라인어셈블리가 전혀 허용되지 않기 때문에 편리합니다.MSVC와 같은 프로그램은 다음과 같습니다.

#실패하다 <iostream> #실패하다 <인스톨 합니다.h>  인트 주된() {   인트 cpuInfo[4];    위해서 (인트 a = 0; a < > 4; a++)   {     __cpuid(cpuInfo, a);     표준::외치다 << > "코드" << > a << > "는 "를 나타냅니다. << > cpuInfo[0] << > ", " << > cpuInfo[1] << > ", " << > cpuInfo[2] << > ", " << > cpuInfo[3] << > '\n';   }    돌아가다 0; } 

많은 인터프리터 또는 컴파일된 스크립트 언어가 FFI 라이브러리를 통해 CPUID를 사용할 수 있습니다.이러한 구현하나는 CPUID opcode를 포함하는 어셈블리 언어를 실행하기 위한 Ruby FFI 모듈의 사용을 보여줍니다.

x86 이외의 CPU 고유의 정보

x86 이외의 CPU 아키텍처 중에는 프로세서의 능력에 관한 특정 형식의 구조화 정보도 있습니다.일반적으로 특수한 레지스터 세트입니다.

  • ARM 아키텍처에는CPUID액세스하려면 [31]EL1 이상이 필요한 코프로세서 레지스터.
  • IBM System z 메인프레임 프로세서는 저장 CPU ID(STIDP1983년 IBM 4381[32] 이후 프로세서 [33]ID를 조회하기 위한 명령입니다.
  • IBM System z 메인프레임 프로세서에는 Store Facilities List Extended(확장된 시설 목록)도 있습니다.STFLE설치되어 있는 하드웨어 기능의 [33]일람을 나타내는 순서.
  • MIPS32/64 아키텍처에서는 필수 프로세서 식별이 정의되어 있습니다.PrId일련의 데이지 체인 컨피규레이션레지스터).[34]
  • PowerPC 프로세서에는 32비트 읽기 전용 프로세서 버전 레지스터가 탑재되어 있습니다.PVR사용 중인 프로세서 모델을 식별합니다.이 명령에는 슈퍼바이저 액세스레벨이 [35]필요해요

DSP트랜스푸터와 같은 칩 패밀리는 (상대적인) 설계의 다양성에도 불구하고 이 명령어를 채택하지 않았습니다.실리콘 식별의 다른 방법이 있을 수 있습니다.예를 들어, Texas Instruments의 DSP에는 각 기능 유닛의 메모리 기반 레지스터 세트가 포함되어 있습니다.이 레지스터 세트는 유닛의 유형과 모델, ASIC 설계 리비전 및 설계 단계에서 선택된 기능을 식별하는 식별자로 시작하여 유닛 고유의 제어와 데이터 등록으로 계속됩니다.sters. 이러한 영역에 대한 액세스는 기존의 로드 및 저장 지침을 사용하여 수행됩니다. 따라서 이러한 장치에서는 장치 식별을 [citation needed]위해 레지스터 세트를 확장할 필요가 없습니다.

「 」를 참조해 주세요.

레퍼런스

  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. ^ "CPUID, EAX=4 - Strange results (Solved)". Software.intel.com. Retrieved 2014-07-10.
  5. ^ "ao486 CPUID instruction". GitHub. 12 March 2022.
  6. ^ "v586: 586 compatible soft core for FPGA". GitHub. 6 December 2021.
  7. ^ "Steam Hardware & Software Survey". store.steampowered.com. Retrieved 2022-07-26.
  8. ^ "Fun with Timers and cpuid - by Jim Cownie - CPU fun". 3 March 2021.
  9. ^ "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.
  10. ^ http://bochs.sourceforge.net/techspec/24161821.pdf[베어 URL PDF]
  11. ^ 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. doi:10.1145/1080695.1069976. CiteSeerX:10.1.1.91.957.
  12. ^ Drepper, Ulrich (2007), What Every Programmer Should Know About Memory, CiteSeerX:10.1.1.91.957
  13. ^ "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.
  14. ^ 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.
  15. ^ a b Shih Kuo (Jan 27, 2012). "Intel® 64 Architecture Processor Topology Enumeration".
  16. ^ "Processor and Core Enumeration Using CPUID AMD". Developer.amd.com. Archived from the original on 2014-07-14. Retrieved 2014-07-10.
  17. ^ "Sandybridge processors report incorrect core number?". Software.intel.com. 2012-12-29. Retrieved 2014-07-10.
  18. ^ "cpuid, __cpuidex". Msdn.microsoft.com. 2014-06-20. Retrieved 2014-07-10.
  19. ^ "x86 architecture - CPUID". sandpile.org. Retrieved 2014-07-10.
  20. ^ "topology.cpp in ps/trunk/source/lib/sysdep/arch/x86_x64 – Wildfire Games". Trac.wildfiregames.com. 2011-12-27. Retrieved 2014-07-10.
  21. ^ 하이퍼스레딩 테크놀로지 및 멀티코어 프로세서 검출
  22. ^ https://software.intel.com/content/www/us/en/develop/download/intel-avx512-fp16-architecture-specification.html[베어 URL PDF]
  23. ^ 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.
  24. ^ "IBRS patch series [LWN.net]".
  25. ^ CPUID Specification (PDF), AMD, September 2010, retrieved 2013-04-02
  26. ^ Linux 커널 소스 코드
  27. ^ Lightweight Profiling Specification (PDF), AMD, August 2010, retrieved 2013-04-03
  28. ^ "Intel® Processor Identification and the CPUID Instruction" (PDF). Download.intel.com. 2012-03-06. Retrieved 2013-04-11.
  29. ^ Ferrie, Peter. "Attacks on Virtual Machine Emulators" (PDF). symantec.com. Symantec Advanced Threat Research. Archived from the original (PDF) on 2007-02-07. Retrieved 15 March 2017.
  30. ^ "GCC-mirror/GCC". GitHub. 13 March 2022.
  31. ^ "ARM Information Center". Infocenter.arm.com. Retrieved 2013-04-11.
  32. ^ "Processor version codes and SRM constants". Archived from the original on 2014-09-08. Retrieved 2014-09-08.
  33. ^ a b "IBM System z10 Enterprise Class Technical Guide" (PDF).
  34. ^ "MIPS32 Architecture For Programmers, Volume III: The MIPS32 Privileged Resource Architecture" (PDF). MIPS Technologies, Inc. 2001-03-12.
  35. ^ "PowerPC Operating Environment Architecture, book III" (PDF).

추가 정보

외부 링크

  • 인텔 프로세서 식별CPUID 명령 (어플리케이션 노트 485) (최종 공개 버전)2013년 인텔 ®64IA-32 아키텍처 소프트웨어 개발자 매뉴얼에 포함되어 있다고 합니다만, 2014년 7월 현재도 이 매뉴얼은 485에 주의해 주십시오.
    • 특히 프로세서토폴로지의 식별과 관련하여 잘못 해석될 수 있는 정보가 포함되어 있습니다.
    • 인텔의 대형 매뉴얼은 이 페이지의 상단에 있는 인텔 ISA 문서보다 뒤떨어지는 경향이 있습니다.이 문서는 아직 공개되지 않은 프로세서에서도 갱신되고 있기 때문에 일반적으로 CPUID 비트가 많이 포함되어 있습니다.예를 들어 ISA book(2014년 5월 개정 19일)에는 7장의 CLFLUSHOPT 비트가 기재되어 있지만 큰 매뉴얼(2014년 6월 개정 51일)에는 기재되어 있지 않습니다.
  • AMD64 아키텍처 프로그래머 매뉴얼 제3권: 범용 및 시스템 명령
  • Windows용 오픈소스 명령줄 도구인 cpuid.exe는 SysTools.zip에서 사용할 수 있습니다.예: cpuid -v는 모든 CPUID 기능 플래그의 값을 표시합니다.
  • instlatx64 - x86/x64 명령 지연 시간, 메모리 지연 시간 및 CPUID 덤프 모음