程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c編程技巧——獲取可用的處理器(CPU)核數

c編程技巧——獲取可用的處理器(CPU)核數

編輯:關於C語言

需求
我們在編程時,尤其是在涉及到系統環境的程序開發中,可能會需要動態的獲得當前機器中可用的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 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved