Linux程序或執行緒繫結到CPU

2021-09-24 10:36:04 字數 2428 閱讀 7759

linux提供乙個介面,可以將程序繫結到特定的cpu:

#include 

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

int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);

引數pid:程序的id號,如果pid為0,則表示本程序

cpusetsize:mask的大小

mask:執行程序的cpu,可以通過以下函式操作mask

#define cpu_set(cpu, cpusetp) //設定cpu

#define cpu_clr(cpu, cpusetp) //刪除cpu

#define cpu_isset(cpu, cpusetp) //判斷cpu

#define cpu_zero(cpusetp) //初始化為0

示例**

#include

#include

#include

#include

void wastetime()

sleep(1);

int main(int argc, char **ar**)

wastetime();

cpu_zero(&mask);

cpu_set(1, &mask); 

if (sched_setaffinity(0, sizeof(mask), &mask) < 0)

wastetime();

cpu_zero(&mask);

cpu_set(2, &mask); 

if (sched_setaffinity(0, sizeof(mask), &mask) < 0)

wastetime();

cpu_zero(&mask);

cpu_set(3, &mask); 

if (sched_setaffinity(0, sizeof(mask), &mask) < 0)

wastetime();}}

編譯之後執行程式,輸入命令top -p 程序id,輸入f,輸入j,輸入回車,可以看到程序在cpu0123之間不停切換。

不僅僅程序可以繫結到cpu,執行緒也可以。linux提供乙個介面,可以將執行緒繫結到特定的cpu:

#include 

int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset);

int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset);

該介面與程序繫結到cpu的介面的使用方法基本一致。

當程序繫結到特定的cpu之後,執行緒還是可以繫結到其他的cpu的,沒有衝突。

#include #include #include #include #include void wastetime()

sleep(1);

}void *thread_func(void *param)

wastetime();

cpu_zero(&mask);

cpu_set(2, &mask);

if (pthread_setaffinity_np(pthread_self(), sizeof(mask),

&mask) < 0)

wastetime();

}} void *thread_func1(void *param)

wastetime();

cpu_zero(&mask);

cpu_set(4, &mask);

if (pthread_setaffinity_np(pthread_self(), sizeof(mask),

&mask) < 0)

wastetime();

}} int main(int argc, char *ar**)

pthread_t my_thread;

if (pthread_create(&my_thread, null, thread_func,

null) != 0)

if (pthread_create(&my_thread, null, thread_func1,

null) != 0)

while(1)

pthread_exit(null);

}

編譯執行之後,輸入命令top -p 程序id,輸入f,輸入j,輸入回車,輸入h,可以看到主線程一直保持在cpu0,乙個執行緒在cpu12之前切換,另乙個執行緒在cpu34之間切換。

windows下繫結執行緒(程序)到指定的CPU核心

乙個程式指定到單獨乙個cpu上執行會比不指定cpu執行時快。這中間主要有兩個原因 1 cpu切換時損耗的效能。2 intel的自動降頻技術和windows的機制衝突 windows有乙個功能是平衡負載,可以將乙個執行緒在不同時間分配到不同cpu,從而使得每乙個cpu不 過累 然而,inter又有乙個...

linux繫結程序到指定cpu

方法之一 top p pidof 程序名稱 方法之二 top p ps h o pid c 程序名稱 如果還要檢視此程序下的各執行緒,可用如下 top h p pidof process 我是分割線 top實時顯示程序在那個cpu上 1 top 2 按 1 實時顯示cpu資訊 3 按 f 進入顯示配...

Linux將執行緒繫結到CPU核心執行

先介紹三個函式 一 pthread setafftinity np 在linux上,我們可以使用pthread特定的pthread setafftinity np函式。通過設定其親和性將每個執行緒固定到單個cpu 設定cpu親和度,為0表示設定成功,非0值表示失敗 int rc pthread se...