2
我可以使用'taskset -c 0 ./out'從終端執行此操作。 我如何從Eclipse執行相同的操作?如何在Ubuntu中運行Eclipse中的C代碼時設置CPU親和力?
我可以使用'taskset -c 0 ./out'從終端執行此操作。 我如何從Eclipse執行相同的操作?如何在Ubuntu中運行Eclipse中的C代碼時設置CPU親和力?
試試這個
/* must be root to use these sched_function-----------------------*/
#define CPU_N 0 // affinity process
void fix_affinity()
{
int error=0;
cpu_set_t mask;
/* mask init */
CPU_ZERO(&mask);
/* add CPU_N to the mask */
CPU_SET(CPU_N,&mask);
/**
test root access
**/
if(getuid()==0)
{
/*change affinity of process */
error=sched_setaffinity(0,sizeof(cpu_set_t),&mask);
}
else
{
printf("must be root to change affinity\n");
}
if(error<0)
{
printf("sched_setaffinity() failed \n");
}
}
,只是把它在你的代碼
fix_affinity();
爲什麼你需要的親和力?通常這是一個更大問題的標誌。 – StilesCrisis 2013-02-23 03:36:36
您可以在C代碼本身中執行相同的操作。查看sched_setaffinity()(僅限Linux)或pthread_setaffinity_np()。 – 2013-02-23 06:05:32
@StilesCrisis我可以想象出各種各樣的原因。例如,如果計算階段較長,並且不希望線程在CPU周圍移動(這會影響緩存未命中率,從而影響計算性能)。在這種情況下唯一的「更大的問題」是你想獲得最大的性能。但是你是對的:也可能是程序員沒有正確處理併發性,同時創建多個線程,並且現在遇到了多核心機器的問題。 – junix 2013-02-23 07:30:00