CPU亲和力
是否有一个progamatic方法来设置Linux操作系统的c / c + +中的进程的CPU亲和力。
你需要使用sched_setaffinity(2)
( 手册页 )
例如,仅在CPU 0和2上运行:
#include <sched.h> cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(0, &mask); CPU_SET(2, &mask); result = sched_setaffinity(0, sizeof(mask), &mask);
(第一个参数为0
表示当前进程,如果是其他进程需要控制,则提供PID)。
在进程级别使用sched_setaffinity,对于单个线程使用pthread_attr_setaffinity_np 。
简而言之
unsigned long mask = 7; /* processors 0, 1, and 2 */ unsigned int len = sizeof(mask); if (sched_setaffinity(0, len, &mask) < 0) { perror("sched_setaffinity"); }
查看CPU亲和力了解更多详情
我已经做了很多努力来实现发生了什么,所以我添加了这个答案,帮助像我这样的人(我在Linux mint中使用gcc
编译器)
#include <sched.h> cpu_set_t mask; inline void assignToThisCore(int core_id) { CPU_ZERO(&mask); CPU_SET(core_id, &mask); sched_setaffinity(0, sizeof(mask), &mask); } int main(){ //cal this: assignToThisCore(2);//assign to core 0,1,2,... return 0; }
但是,不要忘记将这个选项添加到编译器命令中-D _GNU_SOURCE
由于操作系统可能会将进程分配给特定内核,因此可以将GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=2,3"
到位于/etc/default
并在terminal运行sudo update-grub
来保留你想要的内核