c程式設計技巧 獲取可用的處理器(CPU)核數

2021-06-10 14:06:34 字數 1112 閱讀 7268

我們在程式設計時,尤其是在涉及到系統環境的程式開發中,可能會需要動態的獲得當前機器中可用的cpu核數。例如,當我們需要做平行計算時,我們可能會根據cpu核數來決定並行度,因此我們需要在c程式中獲得當前機器中可用的cpu核數。

為了跨平台的需要,我們需要同時考慮在不同平台下獲取機器處理器核數的方法。在這裡我們考慮linux與windows兩個平台,不同的平台有不同的方法來獲取處理器核數。

在windows平台下,我們可以使用getsysteminfo( )這個函式來獲取當前系統的一些軟硬體資訊。其中有一項即是當前機器中處理器的核數。通過如下語句即可獲得所要的資訊:

system_info info;

getsysteminfo(&info);

return info.dwnumberofprocessors;

而在linux平台下,我們可以使用sysconf()或者get_nprocs()來獲取處理器核數。下面分別介紹:

sysconf( )有unistd.h提供,要使用該函式需要#include,其引數可以是_sc_nprocessors_conf,也可以是_sc_nprocessors_onln。sysconf(_sc_nprocessors_conf)返回系統可以使用的核數,但是其值會包括系統中禁用的核的數目,因此該值並不代表當前系統中可用的核數。而sysconf(_sc_nprocessors_onln)的返回值真正的代表了系統當前可用的核數。

gnu c庫提供了另外一種獲取機器可用核數的方法。函式intget_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)類似,真正的反映了當前可用核數。

跨平台的獲取系統當前可用核數的函式如下所示:

int_t get_cpu_core_num( )

獲取系統當前可用核數,是平行計算中確定並行度的一種常用方法,通過本文的小函式,可用學到如何獲取當前可用核數。

c程式設計技巧 獲取可用的處理器(CPU)核數

c程式設計技巧 獲取可用的處理器 cpu 核數 需求我們在程式設計時,尤其是在涉及到系統環境的程式開發中,可能會需要動態的獲得當前機器中可用的cpu核數。例如,當我們需要做平行計算時,我們可能會根據cpu核數來決定並行度,因此我們需要在c程式中獲得當前機器中可用的cpu核數。方法為了跨平台的需要,我...

C 程式設計(十) C 預處理器

c 中的預處理器指令 if如果 c 編譯器遇到最後面跟有 endif 指令的 if 指令,則僅當指定的符號已定義時,它才會編譯這兩個指令之間的 c 中的 if 語句是 boolean,僅測試符號是否已定義。運算子 與 和 或 可用來評估多個符號是否已定義。還可以用括號將符號和運算子分組。結合使用 i...

s3c2440 cp15協處理器

2440的協處理器cp15總共有c0 c15這16個協處理器暫存器,各自具有一定的功能定義。但總的來說,cp15主要跟以下功能有關 1 獲取device id和cache type等一些cpu相關資訊。2 mmu操作。包括mmu的使能和禁止,虛擬位址到實體地址的對映機制建立 3 訪問許可權控制。主要...