如何以编程方式查找机器上的核心数量?

  • 回答 (2)
  • 关注 (0)
  • 查看 (126)

C / C ++中有没有一种方法可以确定一台机器中具有多少核心?如果不存在这样的事情,那么每个平台(Windows / * nix / Mac)的如何确定呢?

璟櫆璟櫆提问于
akjok54stay hungry stay foolish回答于

这个功能是C ++ 11标准的一部分。

#include <thread>

unsigned int nthreads = std::thread::hardware_concurrency();

对于较老的编译器,可以使用Boost.Thread库。

#include <boost/thread.hpp>
unsigned int nthreads = boost::thread::hardware_concurrency();

在任何一种情况下,hardware_concurrency()都会根据CPU内核和超线程单元的数量返回硬件可以同时执行的线程数。

御姐万岁回答于

C ++ 11

//may return 0 when not able to detect

unsigned concurentThreadsSupported = 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];

所属标签

可能回答问题的人

  • 学生

    3 粉丝476 提问7 回答
  • uncle_light

    5 粉丝518 提问7 回答
  • 最爱开车啦

    8 粉丝503 提问5 回答
  • 骑牛看晨曦

    4 粉丝522 提问5 回答

扫码关注云+社区

领取腾讯云代金券