기술이 지속적으로 발전함에 따라 사용자는 특히 성능과 기능 측면에서 프로세서에 대한 요구 사항이 점점 더 높아지고 있습니다. Intel이 1993년에 처음으로 CPUID 명령을 도입한 이후 이 신비한 명령은 프로세서의 세부 사항을 이해하는 데 없어서는 안 될 도구가 되었습니다. CPUID는 소프트웨어가 프로세서 유형을 이해하는 데 도움이 될 뿐만 아니라 MMX 및 SSE와 같은 고급 기능이 구현되었는지 여부도 알려줍니다.
CPUID 명령을 사용하면 개발자가 프로세서 특성을 활용하기 위해 복잡한 기계 코드를 작성할 필요가 없으며 이는 현대 컴퓨터 시스템 개발에 매우 중요합니다.
CPUID 명령이 도입되기 전에 프로그래머는 프로세서 정보를 얻기 위해 몇 가지 모호한 방법을 사용해야 했습니다. 80386 프로세서의 출현으로 EDX 레지스터는 재설정 시 개정판을 표시했지만 이 정보는 재설정 후에만 읽을 수 있었습니다. 따라서 애플리케이션이 이러한 값을 읽는 표준 방법은 없습니다. x86 아키텍처 외부에서 개발자는 CPU 변형을 식별하기 위해 여전히 일부 복잡한 프로세스에 의존해야 합니다. 예를 들어, CPUID 명령어가 없는 Motorola 680x0 시리즈에서 일부 지정된 명령어를 실행하려면 더 높은 권한이 필요하며, 이를 통해 다른 CPU 시리즈를 구별할 수 있습니다.
CPUID 명령의 opcode는 0F A2입니다. CPUID는 명시적으로 EAX 레지스터를 사용하여 반환된 정보의 기본 유형을 결정하므로 이 명령에는 매개 변수가 필요하지 않습니다. CPUID를 호출할 때 EAX가 처음 0으로 설정되면 프로세서에서 지원하는 가장 높은 EAX 호출 매개변수가 EAX 레지스터에 저장됩니다. 확장 기능에 대한 정보를 얻으려면 최상위 비트를 1로 설정하여 CPUID를 호출해야 합니다.
기본적으로 유효한 리프 노드는 최대 23h까지 가능하지만 일부 리프 노드의 정보는 공개 문서에 공개되지 않으며 '예약됨'으로 표시됩니다.
CPUID가 반환하는 결과는 다양합니다. 가장 친숙한 것은 프로세서의 제조업체 ID 문자열과 가장 높은 기본 호출 매개변수를 반환하는 EAX=0을 사용한 호출입니다. Intel의 경우 "GenuineIntel", AMD의 경우 "AuthenticAMD" 등을 포함하여 잘 알려진 여러 프로세서 제조업체 ID 문자열이 있습니다.
EAX=1이면 CPU의 단계, 모델 및 시리즈 정보가 EAX 레지스터에 반환되고 기능 플래그는 각각 EDX 및 ECX 레지스터에 저장됩니다. 또한 이 호출은 개발자가 프로세서에 어떤 기능이 있는지 명확하게 이해할 수 있도록 많은 중요한 기능 플래그를 표시합니다. 예를 들어 일부 프로세서는 가상화, AES 하드웨어 가속 및 기타 기능을 지원할 수 있으며 일상적인 컴퓨팅에 미치는 영향은 분명합니다.
CPUID에서 반환된 정보는 개발자가 특정 하드웨어 특성을 기반으로 소프트웨어 성능을 최적화하는 데 도움이 될 수 있으며, 이는 효율적이고 대상이 지정된 애플리케이션을 만드는 데 중요합니다.
EAX=2인 호출은 캐시 및 TLB 기능에 대한 설명자 정보를 반환합니다. 이러한 설명자는 구조 크기, 태그 및 해당 상관 관계를 포함하여 프로세서 캐시 및 TLB에 대한 다양한 정보를 제공하며 이는 성능 조정과 관련된 애플리케이션을 개발하는 데 특히 중요합니다.
멀티코어 처리 기술이 대중화됨에 따라 멀티코어 프로세서의 토폴로지 지능에 대한 사용자의 요구가 날로 증가하고 있습니다. EAX=4 및 EAX=8000'001Dh 호출을 사용하여 프로세서의 캐시 계층 구조와 토폴로지를 표시하고 각 코어에 대한 자세한 정보를 제공할 수 있습니다. 이 정보는 병렬 컴퓨팅이 필요한 멀티스레딩이나 응용 프로그램에 중요합니다.
캐시 스레드와 실행 스레드 간의 공유 상황을 추가로 분석함으로써 개발자는 소프트웨어 레이아웃을 최적화하여 대기 시간을 줄이고 액세스 속도를 높일 수 있습니다.
CPUID 명령은 실제로 프로세서 특성을 이해하는 데 중요한 도구입니다. CPUID에서 반환된 정보를 해석함으로써 개발자는 프로세서의 기능을 최대한 활용하여 소프트웨어 성능을 향상시킬 수 있습니다. 하지만 향후 프로세서에는 새로운 기능이 도입되고 CPUID는 이러한 기능에 맞게 변경되나요?