2
Я могу сделать это с терминала, используя 'taskset -c 0 ./out'. Как я могу сделать то же самое от Eclipse?Как установить соответствие производительности процессора при запуске кода C из Eclipse в Ubuntu?
Я могу сделать это с терминала, используя 'taskset -c 0 ./out'. Как я могу сделать то же самое от Eclipse?Как установить соответствие производительности процессора при запуске кода C из Eclipse в Ubuntu?
попробовать это
/* 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
Вы можете сделать то же самое из самого кода C. Посмотрите на sched_setaffinity() (только для Linux) или pthread_setaffinity_np(). –
@StilesCrisis Я могу представить себе различные причины этого. Например, если у вас длинная фаза вычислений и вы не хотите, чтобы поток перемещался вокруг процессоров (что повлияло бы на скорость промаха в кеше и, следовательно, производительность вычислений). Единственная «большая проблема» в этом случае заключается в том, что вы хотите получить максимальную производительность. Но вы правы: также может быть, что программист не заботился о параллельности должным образом, одновременно разбивая несколько потоков и получая проблемы с многоядерными машинами. – junix