멀티 스레드 애플리케이션에서 물리적 프로세서 코어당 하나의 스레드를 활용하면 최적의 성능이 보장됩니다. 정확한 스레드 수를 결정하려면 물리적 코어와 하이퍼스레딩 코어를 구별하는 것이 중요합니다. Windows, Mac, Linux에서 하이퍼스레딩 지원과 활성화 상태를 감지하는 방법은 다음과 같습니다.
CPUID 명령어를 활용하면 프로세서의 기능과 구성에 대한 정보를 수집할 수 있습니다. 단계별 프로세스는 다음과 같습니다.
물리적 코어 Count:
여기 C 프로그램이 있습니다. 이 메소드를 구현하는 코드:
#include
#include
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 출력 예:
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
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3