有没有办法以独立于平台的方式从 C/C++ 确定一台机器有多少内核?如果不存在这样的东西,如何确定每个平台(Windows/*nix/Mac)?
最佳答案
C++11
#include <thread>
//may return 0 when not able to detect
const auto processor_count = std::thread::hardware_concurrency();
引用:std::thread::hardware_concurrency
在 C++11 之前的 C++ 中,没有可移植的方式。相反,您需要使用以下一种或多种方法(由适当的 #ifdef
行保护):
Win32
SYSTEM_INFO sysinfo; GetSystemInfo(&sysinfo); int numCPU = sysinfo.dwNumberOfProcessors;
Linux、Solaris、AIX 和 Mac OS X >=10.4(即 Tiger 及以上版本)
int numCPU = sysconf(_SC_NPROCESSORS_ONLN);
FreeBSD、MacOS X、NetBSD、OpenBSD 等
int mib[4]; int numCPU; std::size_t len = sizeof(numCPU); /* set the mib for hw.ncpu */ mib[0] = CTL_HW; mib[1] = HW_AVAILCPU; // alternatively, try HW_NCPU; /* get the number of CPUs from the system */ sysctl(mib, 2, &numCPU, &len, NULL, 0); if (numCPU < 1) { mib[1] = HW_NCPU; sysctl(mib, 2, &numCPU, &len, NULL, 0); if (numCPU < 1) numCPU = 1; }
HPUX
int numCPU = mpctl(MPC_GETNUMSPUS, NULL, NULL);
IRIX
int numCPU = sysconf(_SC_NPROC_ONLN);
Objective-C(Mac OS X >=10.5 或 iOS)
NSUInteger a = [[NSProcessInfo processInfo] processorCount]; NSUInteger b = [[NSProcessInfo processInfo] activeProcessorCount];
关于c++ - 以编程方式查找机器上的内核数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/150355/