하이퍼 스레딩 지원으로 물리적 프로세서 및 코어 감지
소개
스레드 애플리케이션의 경우 스레드 수를 사용 가능한 물리적 프로세서 또는 코어에 맞춰 성능을 최적화하는 것이 중요합니다. 이를 달성하려면 특히 하이퍼스레딩이 포함된 경우 물리적 코어와 가상 코어를 구별하는 것이 필수적입니다. 이 문서에서는 하이퍼 스레딩의 잠재적 존재를 고려하여 물리적 프로세서 및 코어 수를 어떻게 정확하게 감지할 수 있습니까?
하이퍼 스레딩 이해
라는 질문을 다룹니다. 하이퍼스레딩은 물리적 코어 내에 가상 코어를 생성하는 기술입니다. 이를 통해 단일 물리적 코어가 여러 스레드를 처리하여 전체 스레드 수를 효과적으로 늘릴 수 있습니다. 그러나 물리적 코어는 일반적으로 가상 코어에 비해 우수한 성능을 제공한다는 점에 유의해야 합니다.
감지 방법
물리적 프로세서 및 코어 수를 정확하게 감지하려면 CPUID 명령을 활용할 수 있습니다(x86 및 x64 프로세서에서 사용 가능). 이 명령은 다음을 포함하여 프로세서에 대한 공급업체별 정보를 제공합니다.
구현
다음 C 코드는 하이퍼스레딩을 고려하여 물리적 프로세서 및 코어를 감지하기 위한 플랫폼 독립적인 방법을 제공합니다.
<code class="cpp">#include <iostream> #include <stdint.h> using namespace std; // Execute CPUID instruction void cpuID(uint32_t functionCode, uint32_t* registers) { #ifdef _WIN32 __cpuid((int*)registers, (int)functionCode); #else asm volatile( "cpuid" : "=a" (registers[0]), "=b" (registers[1]), "=c" (registers[2]), "=d" (registers[3]) : "a" (functionCode), "c" (0) ); #endif } int main() { uint32_t registers[4]; uint32_t logicalCoreCount, physicalCoreCount; // Get vendor cpuID(0, registers); string vendor = (char*)(®isters[1]); // Get CPU features cpuID(1, registers); uint32_t cpuFeatures = registers[3]; // Get logical core count cpuID(1, registers); logicalCoreCount = (registers[1] >> 16) & 0xff; cout << "Logical cores: " << logicalCoreCount << endl; // Get physical core count physicalCoreCount = logicalCoreCount; if (vendor == "GenuineIntel") { // Intel cpuID(4, registers); physicalCoreCount = ((registers[0] >> 26) & 0x3f) + 1; } else if (vendor == "AuthenticAMD") { // AMD cpuID(0x80000008, registers); physicalCoreCount = ((unsigned)(registers[2] & 0xff)) + 1; } cout << "Physical cores: " << physicalCoreCount << endl; // Check hyper-threading bool hyperThreads = cpuFeatures & (1 << 28) && (physicalCoreCount < logicalCoreCount); cout << "Hyper-threads: " << (hyperThreads ? "true" : "false") << endl; return 0; }</code>
결과
때 다른 Intel 및 AMD 프로세서에서 실행되면 이 코드는 다음과 유사한 출력을 제공합니다.
Intel Core i5-7200U(2개의 물리적 코어, 4개의 논리 코어):
Logical cores: 4 Physical cores: 2 Hyper-threads: true
AMD Ryzen 7 1700X(8개 물리적 코어, 16개 논리적 코어):
Logical cores: 16 Physical cores: 8 Hyper-threads: true
결론
이 감지 구현 이 방법을 사용하면 개발자는 멀티스레드 애플리케이션의 스레드 수를 사용 가능한 물리적 프로세서 및 코어에 정확하게 맞춰 Windows, Mac 및 Linux 시스템 모두에서 성능을 최적화할 수 있습니다. 이를 통해 기본 하드웨어 리소스를 효율적으로 활용하여 성능을 향상하고 실행 시간을 단축할 수 있습니다.
위 내용은 하이퍼스레딩 지원을 통해 물리적 프로세서 및 코어를 정확하게 감지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!