3 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個贊
這是我為了使生活更輕松而制作的包裝紙。它的作用是使調(diào)用線程被“塞住”到具有id的內(nèi)核core_id:
// core_id = 0, 1, ... n-1, where n is the system's number of cores
int stick_this_thread_to_core(int core_id) {
int num_cores = sysconf(_SC_NPROCESSORS_ONLN);
if (core_id < 0 || core_id >= num_cores)
return EINVAL;
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(core_id, &cpuset);
pthread_t current_thread = pthread_self();
return pthread_setaffinity_np(current_thread, sizeof(cpu_set_t), &cpuset);
}

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個贊
假設(shè)Linux:
設(shè)置相似性的界面是-您可能已經(jīng)發(fā)現(xiàn):
int sched_setaffinity(pid_t pid,size_t cpusetsize,cpu_set_t *mask);
傳遞0作為pid,它將僅適用于當(dāng)前線程,或者讓其他線程通過linux特定的調(diào)用報告其內(nèi)核pid pid_t gettid(void);并將其作為pid傳遞。
引用手冊頁
親和力掩碼實(shí)際上是每個線程的屬性,可以針對線程組中的每個線程分別進(jìn)行調(diào)整。調(diào)用gettid(2)返回的值可以在pid參數(shù)中傳遞。將pid指定為0將為調(diào)用線程設(shè)置屬性,并將從調(diào)用返回的值傳遞給getpid(2)將為線程組的主線程設(shè)置屬性。(如果使用的是POSIX線程API,請使用pthread_setaffinity_np(3)而不是sched_setaffinity()。)

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個贊
//compilation: gcc -o affinity affinity.c -lpthread
#define _GNU_SOURCE
#include <sched.h> //cpu_set_t , CPU_SET
#include <pthread.h> //pthread_t
#include <stdio.h>
void *th_func(void * arg);
int main(void) {
pthread_t thread; //the thread
pthread_create(&thread,NULL,th_func,NULL);
pthread_join(thread,NULL);
return 0;
}
void *th_func(void * arg)
{
//we can set one or more bits here, each one representing a single CPU
cpu_set_t cpuset;
//the CPU we whant to use
int cpu = 2;
CPU_ZERO(&cpuset); //clears the cpuset
CPU_SET( cpu , &cpuset); //set CPU 2 on cpuset
/*
* cpu affinity for the calling thread
* first parameter is the pid, 0 = calling thread
* second parameter is the size of your cpuset
* third param is the cpuset in which your thread will be
* placed. Each bit represents a CPU
*/
sched_setaffinity(0, sizeof(cpuset), &cpuset);
while (1);
; //burns the CPU 2
return 0;
}
在POSIX環(huán)境中,可以使用cpusets來控制進(jìn)程或pthread可以使用哪些CPU。這種類型的控制稱為CPU關(guān)聯(lián)。
函數(shù)“ sched_setaffinity”接收pthread ID和cpuset作為參數(shù)。當(dāng)您在第一個參數(shù)中使用0時,調(diào)用線程將受到影響
- 3 回答
- 0 關(guān)注
- 990 瀏覽
添加回答
舉報