Linux线程关联使线程运行速度变慢
我试图通过设置线程的cpu相关性来提高cpu利用率并使线程运行得更快。这是我的密码:Linux线程关联使线程运行速度变慢,linux,pthreads,cpu,affinity,Linux,Pthreads,Cpu,Affinity,我试图通过设置线程的cpu相关性来提高cpu利用率并使线程运行得更快。这是我的密码: #define _GNU_SOURCE #include <stdio.h> #include <unistd.h> #include <pthread.h> #include <stdlib.h> #include <sched.h> #include <time.h> #define NUM 100000000 void *randf
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
#include <sched.h>
#include <time.h>
#define NUM 100000000
void *randfun(void *arg)
{
int i;
clock_t start, end;
start = clock();
for(i=0; i<NUM; i++)
;
end = clock();
printf("cpu random: %fs\n", (double)(end - start)/CLOCKS_PER_SEC);
return;
}
void *fun(void *arg)
{
int process_id = (int)arg;
cpu_set_t mask;
cpu_set_t get;
CPU_ZERO(&mask);
CPU_SET(process_id, &mask);
pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask);
CPU_ZERO(&get);
int ac_id = pthread_getaffinity_np(pthread_self(), sizeof(get), &get);
if(ac_id < 0)
{
printf("set thread affinity failed\n");
return NULL;
}
int i;
clock_t start, end;
start = clock();
for(i=0; i<NUM; i++)
;
end = clock();
printf("cpu affinity: %fs\n", (double)(end - start)/CLOCKS_PER_SEC);
return;
}
int main()
{
int i;
int num = sysconf(_SC_NPROCESSORS_ONLN);
pthread_t *tidset = (pthread_t*)malloc(sizeof(pthread_t)*num);
for(i=0; i<num; i++){
pthread_create(tidset+i, NULL, (void*)fun, (void*)i);
}
for(i=0; i<num; i++){
pthread_join(tidset[i], NULL);
}
for(i=0; i<num; i++){
pthread_create(tidset+i, NULL, (void*)randfun, NULL);
}
for(i=0; i<num; i++){
pthread_join(tidset[i], NULL);
}
free(tidset);
return 0;
}
有什么不对劲吗 试图超越内核是非常非常困难的。它能获得比你多得多的信息。是的,有点不对劲。这是:“我试图通过设置线程的cpu相关性来提高cpu利用率并使线程运行得更快”。你最初的前提是不正确的。无法保证CPU亲和力本身会产生您想要的效果。另外,你还没有解释你是如何得出一个比另一个“跑得快”的结论的。查看printf的输出并不能确定地告诉您这一点。总之,您的前提和测试方法可能需要做一些工作。
2 Intel(R) Core(TM) i5-4260U CPU @ 1.40GHz
1 physical id : 0
1 address sizes : 36 bits physical, 48 bits virtual
1 physical id : 0
1 address sizes : 36 bits physical, 48 bits virtual