零零乙 2008-09-29 19:51 采纳率: 33.3%
浏览 421
已采纳

编程查找机器上的核数

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条回答 默认 最新

  • 零零乙 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条)

报告相同问题?

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP