?yb? 2008-09-29 19:51 采纳率: 100%
浏览 482
已采纳

以编程方式查找机器上的核心数

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)?

转载于:https://stackoverflow.com/questions/150355/programmatically-find-the-number-of-cores-on-a-machine

  • 写回答

20条回答 默认 最新

  • 程序go 2008-09-29 22:14
    关注

    C++11

    //may return 0 when not able to detect
    unsigned concurentThreadsSupported = 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];
      
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(19条)

报告相同问题?

悬赏问题

  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow