zoukankan      html  css  js  c++  java
  • 获取可用的处理器(CPU)核数【转】

    linux下获取cpu核数,sysconf(_SC_NPROCESSORS_CONF),,,
    from:红黑联盟,https://www.2cto.com/kf/201210/164480.html
    c编程技巧——获取可用的处理器(CPU)核数
    2012-10-30 08:58:47      0个评论      
    收藏   我要投稿
     

    需求
    我们在编程时,尤其是在涉及到系统环境的程序开发中,可能会需要动态的获得当前机器中可用的CPU核数。例如,当我们需要做并行计算时,我们可能会根据CPU核数来决定并行度,因此我们需要在C程序中获得当前机器中可用的CPU核数。

    方法
    为了跨平台的需要,我们需要同时考虑在不同平台下获取机器处理器核数的方法。在这里我们考虑Linux与Windows两个平台,不同的平台有不同的方法来获取处理器核数。

    在Windows平台下,我们可以使用GetSystemInfo( )这个函数来获取当前系统的一些软硬件信息。其中有一项即是当前机器中处理器的核数。通过如下语句即可获得所要的信息:
    SYSTEM_INFO info;
    GetSystemInfo(&info);
    return info.dwNumberOfProcessors;

    而在Linux平台下,我们可以使用sysconf( )或者get_nprocs( )来获取处理器核数。下面分别介绍:
    sysconf( )有unistd.h提供,要使用该函数需要#include<unistd.h>,其参数可以是_SC_NPROCESSORS_CONF,也可以是_SC_NPROCESSORS_ONLN。sysconf(_SC_NPROCESSORS_CONF)返回系统可以使用的核数,但是其值会包括系统中禁用的核的数目,因此该值并不代表当前系统中可用的核数。而sysconf(_SC_NPROCESSORS_ONLN)的返回值真正的代表了系统当前可用的核数。

    GNU C库提供了另外一种获取机器可用核数的方法。函数int
     get_nprocs_conf (void),int get_nprocs (void)在 sys/sysinfo.h中定义,这两个函数可用获取机器的核数。其中get_nprocs_conf (void)的返回值与sysconf(_SC_NPROCESSORS_CONF)类似,并不真正表名当前可用核数;而get_nprocs
     (void)的返回值与sysconf(_SC_NPROCESSORS_ONLN)类似,真正的反映了当前可用核数。


    跨平台函数
    跨平台的获取系统当前可用核数的函数如下所示:


    [cpp]
    Int_t get_CPU_core_num( ) 

    #if defined(WIN32) 
        SYSTEM_INFO info; 
        GetSystemInfo(&info); 
        return info.dwNumberOfProcessors; 
    #elif defined(LINUX) || defined(SOLARIS) || defined(AIX) 
        return get_nprocs();   //GNU fuction 
    #else 
    #error  不支持的操作系统 
    #endif 

  • 相关阅读:
    I NEED A OFFER!
    水题 Codeforces Round #303 (Div. 2) A. Toy Cars
    模拟 HDOJ 5099 Comparison of Android versions
    模拟 HDOJ 5095 Linearization of the kernel functions in SVM
    贪心 HDOJ 5090 Game with Pearls
    Kruskal HDOJ 1863 畅通工程
    Kruskal HDOJ 1233 还是畅通工程
    并查集 HDOJ 1232 畅通工程
    DFS/并查集 Codeforces Round #286 (Div. 2) B
    水题 Codeforces Round #286 (Div. 2) A Mr. Kitayuta's Gift
  • 原文地址:https://www.cnblogs.com/the-tops/p/7573590.html
Copyright © 2011-2022 走看看