>  기사  >  백엔드 개발  >  Windows, Mac 및 Linux에서 하이퍼스레딩이 활성화되어 있는지 확인하는 방법은 무엇입니까?

Windows, Mac 및 Linux에서 하이퍼스레딩이 활성화되어 있는지 확인하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-30 12:38:26127검색

How to Determine if Hyper-Threading is Enabled on Windows, Mac, and Linux?

활성화된 하이퍼스레딩 존재 감지

멀티 스레드 애플리케이션에서는 물리적 프로세서 코어당 하나의 스레드를 활용하면 최적의 성능이 보장됩니다. 정확한 스레드 수를 결정하려면 물리적 코어와 하이퍼스레딩 코어를 구별하는 것이 중요합니다. Windows, Mac 및 Linux에서 하이퍼스레딩 지원과 활성화 상태를 감지하는 방법은 다음과 같습니다.

CPUID 명령어

CPUID 명령어를 활용하면 프로세서의 기능과 구성에 대한 정보를 수집할 수 있습니다. 단계별 프로세스는 다음과 같습니다.

  1. 공급업체 감지: CPUID 기능 0을 실행하여 CPU 공급업체(예: Intel 또는 AMD)를 식별합니다.
  2. 하이퍼스레딩 비트 검사: CPUID 기능 1을 실행하고 EDX 레지스터의 비트 28을 확인합니다. 이 비트는 하이퍼스레딩 지원을 나타냅니다.
  3. 논리 코어 수: CPUID 함수 1에 있는 EBX의 비트[23:16]에서 CPU당 논리 코어 수를 검색합니다.
  4. 물리적 코어 수:

    • Intel CPU: 공급업체가 'GenuineIntel'인 경우 CPUID 함수 4를 사용하여 물리적 코어 수를 얻습니다. EAX 레지스터의 비트[31:26]를 추출하여 코어 + 1.
    • AMD CPU: 공급업체가 'AuthenticAMD'인 경우 CPUID 함수 0x80000008을 실행하고 물리적 코어 +1 수를 파생합니다. ECX 레지스터의 비트 [7:0]을 사용하여 하나를 만듭니다.

구현

다음은 이 방법을 구현하는 C 프로그램입니다.

<code class="cpp">#include <iostream>
#include <string>

void cpuID(unsigned i, unsigned regs[4]);

int main() {
  unsigned regs[4];

  // Get CPUID information
  cpuID(0x00, regs);
  cpuID(0x01, regs);

  // Determine vendor
  char vendor[12];
  ((unsigned *)vendor)[0] = regs[1];
  ((unsigned *)vendor)[1] = regs[3];
  ((unsigned *)vendor)[2] = regs[2];
  std::string cpuVendor = std::string(vendor, 12);

  // Variables
  unsigned logicalCores = (regs[1] >> 16) & 0xff;
  unsigned cores = logicalCores;
  bool hyperThreads = false;

  // Detect hyper-threading
  if (cpuVendor == "GenuineIntel") {
    cpuID(0x04, regs);
    cores = ((regs[0] >> 26) & 0x3f) + 1;
  } else if (cpuVendor == "AuthenticAMD") {
    cpuID(0x80000008, regs);
    cores = ((unsigned)(regs[2] & 0xff)) + 1;
  }

  if (regs[3] & (1 << 28) && cores < logicalCores) {
    hyperThreads = true;
  }

  // Print results
  std::cout << "Logical cores: " << logicalCores << std::endl;
  std::cout << "Cores: " << cores << std::endl;
  std::cout << "Hyper-threading: " << (hyperThreads ? "true" : "false") << std::endl;

  return 0;
}</code>

출력 예:

Intel Core 2 Duo E8400(하이퍼스레딩 없음):

Logical cores: 2
Cores: 2
Hyper-threading: false

Intel Core i7-7700K(하이퍼스레딩 있음):

 Logical cores: 8
    Cores: 4
hyper-threads: true

AMD Ryzen 5 2600X(SMT 포함):

 Logical cores: 12
    Cores: 6
hyper-threads: true

위 내용은 Windows, Mac 및 Linux에서 하이퍼스레딩이 활성화되어 있는지 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.