2013-02-23 1 views
2

Je peux le faire à partir du terminal en utilisant 'taskset -c 0 ./out'. Comment puis-je faire la même chose avec Eclipse?Comment définir l'affinité CPU lors de l'exécution d'un code C à partir d'Eclipse dans Ubuntu?

+0

Pourquoi avez-vous besoin d'affinité? Habituellement, c'est un signe d'un plus gros problème. – StilesCrisis

+3

Vous pouvez faire de même à partir du code C lui-même. Regardez sched_setaffinity() (Linux uniquement) ou pthread_setaffinity_np(). –

+0

@StilesCrisis Je peux imaginer différentes raisons pour cela. Par exemple si vous avez une longue phase de calcul et que vous ne voulez pas que le thread soit déplacé autour des processeurs (ce qui aurait un impact sur votre taux d'erreur de cache et donc sur les performances de calcul). Le seul "gros problème" dans ce cas est que vous voulez obtenir des performances maximales. Mais vous avez raison: il se pourrait aussi que le programmeur n'ait pas fait attention à la simultanéité lors de la mise en caisse de plusieurs threads et qu'il ait eu des problèmes avec les machines multi-core. – junix

Répondre

0

essayer cette

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

    } 

et il suffit d'appeler dans votre code

fix_affinity(); 
Questions connexes