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();
Pourquoi avez-vous besoin d'affinité? Habituellement, c'est un signe d'un plus gros problème. – StilesCrisis
Vous pouvez faire de même à partir du code C lui-même. Regardez sched_setaffinity() (Linux uniquement) ou pthread_setaffinity_np(). –
@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