2013-02-23 93 views
2

我可以使用'taskset -c 0 ./out'從終端執行此操作。 我如何從Eclipse執行相同的操作?如何在Ubuntu中運行Eclipse中的C代碼時設置CPU親和力?

+0

爲什麼你需要的親和力?通常這是一個更大問題的標誌。 – StilesCrisis 2013-02-23 03:36:36

+3

您可以在C代碼本身中執行相同的操作。查看sched_setaffinity()(僅限Linux)或pthread_setaffinity_np()。 – 2013-02-23 06:05:32

+0

@StilesCrisis我可以想象出各種各樣的原因。例如,如果計算階段較長,並且不希望線程在CPU周圍移動(這會影響緩存未命中率,從而影響計算性能)。在這種情況下唯一的「更大的問題」是你想獲得最大的性能。但是你是對的:也可能是程序員沒有正確處理併發性,同時創建多個線程,並且現在遇到了多核心機器的問題。 – junix 2013-02-23 07:30:00

回答

0

試試這個

/* 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();