以编程方式查找计算机上的内核数

有没有一种方法可以以独立于平台的方式确定一台机器有多少个C/C++内核?如果不存在这样的东西,那么根据平台(Windows/*nix/Mac)来确定它呢

C++11

#包括<螺纹>
//无法检测时可能返回0
const auto processor_count=std::thread::hardware_concurrency();

参考:std::thread::hardware\u并发


在C++ 11之前C++没有可移植的方法。相反,您需要使用以下一种或多种方法(由适当的#ifdef行保护):

  • Win32

    系统信息系统信息;
    GetSystemInfo(和sysinfo);
    int numpu=sysinfo.dwNumberOfProcessors;
    
  • Linux、Solaris、AIX和Mac OS X>=10.4(即Tiger以后的版本)

    int numpu=sysconf(仅处理器);
    
  • FreeBSD、MacOS X、NetBSD、OpenBSD等

    intmib[4];
    int numCPU;
    标准:尺寸长度=尺寸(numCPU);
    /*为hw.ncpu设置mib*/
    mib[0]=CTL_HW;
    mib[1]=HW_AVAILCPU;//或者,试试HW_NCPU;
    /*从系统中获取CPU的数量*/
    sysctl(mib,2,&numpu,&len,NULL,0);
    如果(numCPU<1)
    {
    mib[1]=HW_NCPU;
    sysctl(mib,2,&numpu,&len,NULL,0);
    如果(numCPU<1)
    numCPU=1;
    }
    
  • HPUX

    int numpu=mpctl(MPC_getnumpus,NULL,NULL);
    
  • 虹彩

    int numpu=sysconf(\u SC\u NPROC\u ONLN);
    
  • Objective-C(Mac OS X>=10.5或iOS)

    nsu整数a=[[NSProcessInfo processInfo]processorCount];
    NSUB整数=[[NSProcessInfo processInfo]activeProcessorCount];
    

发表评论