Programatically C/C ++/Assembly обнаруживают, если гиперпоточность активна в Windows, Mac и Linux [дубликат]

6
задан HTASSCPP 25 May 2010 в 11:55
поделиться

4 ответа

Инструкция CPUID (когда вы передаете функцию 1H в EAX) возвращает флаг гиперпоточности в бите 28 регистра EDX. Я думаю, что многоядерные процессоры сообщают, что они поддерживают гиперпоточность, даже если каждое отдельное ядро может выполнять только один поток.

Он также возвращает количество логических процессоров на один физический процессор в битах 23-16 EBX. Я думаю, что вам придется запрашивать каждый процессор по отдельности, чтобы найти все процессоры в вашей системе.

4
ответ дан 8 December 2019 в 15:59
поделиться

В Windows 2003 Server и Windows XP SP3 и более поздних версиях эту информацию можно определить с помощью системного вызова GetLogicalProcessorInformation .

4
ответ дан 8 December 2019 в 15:59
поделиться

Linux:

Количество физических процессоров:

grep -i "physical id" /proc/cpuinfo | sort -u | wc -l

Количество логических процессоров:

grep -i "processor" /proc/cpuinfo | sort -u | wc -l
4
ответ дан 8 December 2019 в 15:59
поделиться

В OS X:

#include <sys/sysctl.h>

int physicalCores;
sysctlbyname("hw.physicalcpu", &physicalCores, sizeof(physicalCores), NULL, 0);

Для получения дополнительной информации смотрите заголовок или manpage. (Обратите внимание, что количество логических процессоров можно получить таким же образом, используя строку "hw.logicalcpu")

3
ответ дан 8 December 2019 в 15:59
поделиться