Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Как программно определить количество ядер в процессоре?

#cpp #linux


Всем доброго времени суток, подскажите, как в C/C++ программно определить количество
ядер в процессоре? Может метод какой есть?
#include 

using namespace std;

int main()
{
    int numCPU = sysconf(_SC_NPROCESSORS_ONLN);
    cout << numCPU << endl;
}
    


Ответы

Ответ 1



Отредактировано: Раз нашел, то сделал перевод аналогичного вопроса на StackOverflow. Linux, Solaris, AIX, OS X >= 10.4: sysconf(_SC_NPROCESSORS_ONLN); Или прочитать в /proc/cpuinfo (для LSB-совместимых дистрибутивов). FreeBSD, OS X/Darwin, NetBSD, OpenBSD и их *BSD-сородичи: int mib[4] = {CTL_HW, HW_AVAILCPU, 0, 0}; size_t len = sizeof(numCPU); sysctl(mib, 2, &numCPU, &len, NULL, 0); if (numCPU < 0) { mib[1] = HW_NCPU; sysctl(mib, 2, &numCPU, &len, NULL, 0); } HPUX: mpctl(MPC_GETNUMSPUS, NULL, NULL) IRIX: sysconf(_SC_NPROC_ONLN) OS X >= 10.5 (на Objective-C): NSUInteger a = [[NSProcessInfo processInfo] processorCount]; NSUInteger b = [[NSProcessInfo processInfo] activeProcessorCount]; Windows SYSTEM_INFO sysinfo; GetSystemInfo(&sysinfo); numCPU = sysinfo.dwNumberOfProcessors;

Ответ 2



Есть же кроссплатформенное решение в boost-е и в новом стандарте: {boost,std}::thread::hardware_concurrency() Правда им разрешается возвращать 0, если по каким-то причинам библиотека не может (или не хочет) определять число ядер, и gcc4.6 под Linux так и делает (видимо просто не реализовано). Но в то же время boost-овая версия выдает правильное число. Сейчас попробовал под Mac Os X, gcc4.7 – все правильно показывают и boost и std версия.

Комментариев нет:

Отправить комментарий