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()編譯執行之後,輸入命令top -p 程序id,輸入f,輸入j,輸入回車,輸入h,可以看到主線程一直保持在cpu0,乙個執行緒在cpu12之前切換,另乙個執行緒在cpu34之間切換。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);
}
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...