물리적 프로세서/코어 수 결정
최적의 성능을 위해서는 멀티스레드 애플리케이션에 정확한 물리적 프로세서 또는 코어 수가 필요합니다. 특히 단일 물리적 코어에서 여러 논리 스레드가 실행되는 하이퍼스레딩을 고려하면 논리 프로세서 수를 감지하는 것만으로는 충분하지 않습니다.
하이퍼스레딩 지원 및 활성화 감지
정확하게 계산하려면 물리적 프로세서의 경우 하이퍼스레딩이 지원되고 활성화되어 있는지 확인하는 것이 중요합니다. 이를 위해서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!