>백엔드 개발 >C++ >시스템의 실제 프로세서 또는 코어 수를 확인하는 방법은 무엇입니까?

시스템의 실제 프로세서 또는 코어 수를 확인하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-01 04:28:02573검색

How to Determine the Actual Number of Physical Processors or Cores in a System?

물리적 프로세서/코어 수 결정

최적의 성능을 위해서는 멀티스레드 애플리케이션에 정확한 물리적 프로세서 또는 코어 수가 필요합니다. 특히 단일 물리적 코어에서 여러 논리 스레드가 실행되는 하이퍼스레딩을 고려하면 논리 프로세서 수를 감지하는 것만으로는 충분하지 않습니다.

하이퍼스레딩 지원 및 활성화 감지

정확하게 계산하려면 물리적 프로세서의 경우 하이퍼스레딩이 지원되고 활성화되어 있는지 확인하는 것이 중요합니다. 이를 위해서는 CPUID 명령의 EDX 레지스터 비트 28을 검사해야 합니다. 이 비트가 설정되면 하이퍼스레딩이 지원됩니다. 그러나 단순히 지원을 확인하는 것만으로는 충분하지 않습니다. 비트도 활성 상태여야 합니다.

CPUID 명령어를 사용한 구현

CPUID 명령어를 사용하는 포괄적인 C 솔루션이 제공됩니다.

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

void cpuID(unsigned i, unsigned regs[4]) { ... }

int main() {
  unsigned regs[4];
  char vendor[12];

  // Get vendor
  cpuID(0, regs);
  ((unsigned *)vendor)[0] = regs[1];
  ((unsigned *)vendor)[1] = regs[3];
  ((unsigned *)vendor)[2] = regs[2];
  string cpuVendor = string(vendor, 12);

  // Get CPU features
  cpuID(1, regs);
  unsigned cpuFeatures = regs[3];

  // Logical core count per CPU
  cpuID(1, regs);
  unsigned logical = (regs[1] >> 16) & 0xff;
  unsigned cores = logical;

  // Determine core count based on vendor
  if (cpuVendor == "GenuineIntel") {
    cpuID(4, regs);
    cores = ((regs[0] >> 26) & 0x3f) + 1;
  } else if (cpuVendor == "AuthenticAMD") {
    cpuID(0x80000008, regs);
    cores = ((regs[2] & 0xff)) + 1;
  }

  // Detect hyper-threads
  bool hyperThreads = cpuFeatures & (1 << 28) && cores < logical;

  // Display results
  cout << " logical cpus: " << logical << endl;
  cout << "    cpu cores: " << cores << endl;
  cout << "hyper-threads: " << (hyperThreads ? "true" : "false") << endl;

  return 0;
}</code>

출력 예

다른 Intel 시스템에서 실행하는 경우 프로그램은 다음을 출력합니다.

  • Core 2 Duo T7500:

    logical cpus: 2
      cpu cores: 2
    hyper-threads: false
  • 코어 2 쿼드 Q8400:

    logical cpus: 4
      cpu cores: 4
    hyper-threads: false
  • Xeon E5520(듀얼 CPU 패키지):

    logical cpus: 16
      cpu cores: 8
    hyper-threads: true
  • 펜티엄 4 3.00GHz:

    logical cpus: 2
      cpu cores: 1
    hyper-threads: true

위 내용은 시스템의 실제 프로세서 또는 코어 수를 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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