執行緒繫結CPU核

2021-07-04 03:19:56 字數 1853 閱讀 4700

linux系統提供api函式sched_setaffinity和sched_getaffinity用於設定或獲取執行緒的可以使用的cpu核。

int sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);

這個函式中pid表示需要設定或獲取繫結資訊的執行緒id(或程序id),如果為0,表示對當前呼叫的執行緒進行設定;第2個引數cpusetsize一般設定為sizeof(cpu_set_t),用以表示第3個引數指向的記憶體結構物件的大小;第3個引數mask指向型別為cpu_set_t物件的指標,用以設定或獲取指定執行緒可以使用的cpu核列表。linux提供函式cpu_zero、cpu_set和cpu_isset對cpu_set_t型別的物件進行操作,其中cpu_zero用於清空cpu_set_t型別物件的內容,cpu_set用於設定cpu_set_t型別物件,cpu_isset用於判斷cpu_set_t型別物件與核對應的位是否被設定。下面通過簡單的**示例來說明這兩個函式的具體用法。

設定執行緒繫結**:

cpu_set_t mask;

int blist[8]=; //設定需要繫結的核列表

#pragma omp parallel private(mask)

該段**將paralle region裡面的8個執行緒依次繫結到核2,5,13,9,3,6,7,4。同樣可以使用sched_getaffinity函式獲取執行緒的能夠使用的核的列表,示例**如下:

int num_processors = sysconf(_sc_nprocessors_conf); //獲取當前節點核的數目

cpu_set_t get;

int i = 0;

cpu_zero(&get);

sched_getaffinity(0, sizeof(cpu_set_t), &get); //獲取當前呼叫執行緒的可以使用的核

for(i = 0; i < num_processors; i++)

}下面是乙個完整的例子

檔案bind.c

#include

#include

#include

#include

#include

#define __use_gnu

#include

#include

#include

#include

#define thread_max_num 100  //1個cpu內的最多程序數

int num=0;  //cpu中核數

void* threadfun(void* arg)  //arg  傳遞執行緒標號(自己定義)

while (1)

int i;

for (i = 0; i < num; i++)}}

return null;

}int main(int argc, char* argv)

for(i=0; i< num; i++)

return 0;

}編譯命令:gcc bind.c -o bind -lpthread

執行:./bind

輸出結果:略

特別注意:

#define __use_gnu不要寫成#define _use_gnu

#include必須寫在#define __use_gnu之後,否則編譯會報錯

檢視你的執行緒情況可以在執行時在另乙個視窗使用top -h來檢視執行緒的情況,檢視各個核上的情況請使用top命令然後按數字「1」來檢視。

出處:gx注釋:如果要讓各個核處於全負荷執行狀態,需要將threadfun函式中while(1){}中包含的處理程式注釋掉。緣由是處理while(1)內部的函式時,會有時間片切換。

執行緒繫結CPU核

linux系統提供api函式sched setaffinity和sched getaffinity用於設定或獲取執行緒的可以使用的cpu核。int sched setaffinity pid t pid,unsigned int cpusetsize,cpu set t mask 這個函式中pid表...

xilinx 繫結執行緒到cpu核

linux系統提供api函式sched setaffinity和sched getaffinity用於設定或獲取執行緒的可以使用的cpu核。int sched setaffinity pid t pid,unsigned int cpusetsize,cpu set t mask 這個函式中pid表...

Linux中線程與CPU核的繫結

最近在對專案進行效能優化,由於在多核平台上,所以了解了些程序 執行緒繫結cpu核的問題,在這裡將所學記錄一下。不管是執行緒還是程序,都是通過設定親和性 affinity 來達到目的。對於程序的情況,一般是使用sched setaffinity這個函式來實現,網上講的也比較多,這裡主要講一下執行緒的情...