Инструкция CPUID (когда вы передаете функцию 1H в EAX) возвращает флаг гиперпоточности в бите 28 регистра EDX. Я думаю, что многоядерные процессоры сообщают, что они поддерживают гиперпоточность, даже если каждое отдельное ядро может выполнять только один поток.
Он также возвращает количество логических процессоров на один физический процессор в битах 23-16 EBX. Я думаю, что вам придется запрашивать каждый процессор по отдельности, чтобы найти все процессоры в вашей системе.
В Windows 2003 Server и Windows XP SP3 и более поздних версиях эту информацию можно определить с помощью системного вызова GetLogicalProcessorInformation .
Linux:
Количество физических процессоров:
grep -i "physical id" /proc/cpuinfo | sort -u | wc -l
Количество логических процессоров:
grep -i "processor" /proc/cpuinfo | sort -u | wc -l
В OS X:
#include <sys/sysctl.h>
int physicalCores;
sysctlbyname("hw.physicalcpu", &physicalCores, sizeof(physicalCores), NULL, 0);
Для получения дополнительной информации смотрите заголовок или manpage. (Обратите внимание, что количество логических процессоров можно получить таким же образом, используя строку "hw.logicalcpu")