Stockfish-1.7.0 Hyper-threading Detection
Posted: Fri Apr 09, 2010 2:35 pm
Having now found a way to toggle hyper-threading off and on, I can confirm that the code below does not work on my dual quad-core Intel 5520 Mac Pro.
The printf statement produces 16 8 8 in both cases.
The printf statement produces 16 8 8 in both cases.
Code: Select all
/// HT_enabled() returns true if hyper-threading is enabled on current machine
static bool HT_enabled() {
char CPUString[0x20];
int CPUInfo[4] = {-1};
int nIds, nLogicalCPU, nCores;
// Detect CPU producer
__cpuid(CPUInfo, 0);
nIds = CPUInfo[0];
memset(CPUString, 0, sizeof(CPUString));
memcpy(&CPUString[0], &CPUInfo[1], sizeof(int));
memcpy(&CPUString[4], &CPUInfo[3], sizeof(int));
memcpy(&CPUString[8], &CPUInfo[2], sizeof(int));
// Not an Intel CPU or CPUID.4 not supported
if (strcmp(CPUString, "GenuineIntel") || nIds < 4)
return false;
// Detect if HT Technology is supported
__cpuid(CPUInfo, 1);
if (!((CPUInfo[3] >> 28) & 1))
return false;
nLogicalCPU = (CPUInfo[1] >> 16) & 0xFF;
// Detect number of cores
__cpuid(CPUInfo, 4);
nCores = 1 + ((CPUInfo[0] >> 26) & 0x3F);
printf("%d %d %d\n", nLogicalCPU, nCores, builtin_cpu_count());
return nLogicalCPU > nCores;
}