#cpp #linux
Всем доброго времени суток, подскажите, как в C/C++ программно определить количество ядер в процессоре? Может метод какой есть? #includeusing 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 версия.
Комментариев нет:
Отправить комментарий