Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically find the number of cores on a machine

Is there a way to determine how many cores a machine has from C/C++ in a platform-independent way? If no such thing exists, what about determining it per-platform (Windows/*nix/Mac)?

like image 611
hazzen Avatar asked Sep 29 '08 19:09

hazzen


People also ask

How do I check cores in Python?

cpu_count() method in Python is used to get the number of CPUs in the system. This method returns None if number of CPUs in the system is undetermined. Parameter: No parameter is required. Return Type: This method returns an integer value which denotes the number of CPUs in the system.

How many cores do I have command line?

Check CPU cores from /proc/cpuinfo File in Linux Open the terminal and run this command: cat /proc/cpuinfo | grep “cpu cores” | uniq |sed -n 1p |awk '{print $4}'. It will list the number of CPU cores on your system.

How CPU cores are calculated?

To calculate the number of logical CPUs in vSphere Client, multiply the number of sockets by the number of cores. For example, if you need to configure a VM to use 2-processor sockets, each has 2 CPU cores, then the total number of logical CPUs is 2*2=4.


1 Answers

C++11

#include <thread>  //may return 0 when not able to detect const auto processor_count = std::thread::hardware_concurrency(); 

Reference: std::thread::hardware_concurrency


In C++ prior to C++11, there's no portable way. Instead, you'll need to use one or more of the following methods (guarded by appropriate #ifdef lines):

  • Win32

    SYSTEM_INFO sysinfo; GetSystemInfo(&sysinfo); int numCPU = sysinfo.dwNumberOfProcessors; 
  • Linux, Solaris, AIX and Mac OS X >=10.4 (i.e. Tiger onwards)

    int numCPU = sysconf(_SC_NPROCESSORS_ONLN); 
  • FreeBSD, MacOS X, NetBSD, OpenBSD, etc.

    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 or iOS)

    NSUInteger a = [[NSProcessInfo processInfo] processorCount]; NSUInteger b = [[NSProcessInfo processInfo] activeProcessorCount]; 
like image 112
paxos1977 Avatar answered Oct 09 '22 10:10

paxos1977