2013-02-23 5 views
2

Я могу сделать это с терминала, используя 'taskset -c 0 ./out'. Как я могу сделать то же самое от Eclipse?Как установить соответствие производительности процессора при запуске кода C из Eclipse в Ubuntu?

+0

Зачем вам сродство? Обычно это признак большой проблемы. – StilesCrisis

+3

Вы можете сделать то же самое из самого кода C. Посмотрите на sched_setaffinity() (только для Linux) или pthread_setaffinity_np(). –

+0

@StilesCrisis Я могу представить себе различные причины этого. Например, если у вас длинная фаза вычислений и вы не хотите, чтобы поток перемещался вокруг процессоров (что повлияло бы на скорость промаха в кеше и, следовательно, производительность вычислений). Единственная «большая проблема» в этом случае заключается в том, что вы хотите получить максимальную производительность. Но вы правы: также может быть, что программист не заботился о параллельности должным образом, одновременно разбивая несколько потоков и получая проблемы с многоядерными машинами. – junix

ответ

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