2012-05-07 1 views
11

Je suis en train deComment utiliser sched_getaffinity (2) et sched_setaffinity (2). S'il vous plaît donner exemple de code à utiliser dans le programme C

Run 16 copies en même temps que le processeur épinglant (2 copies par cœur)

Run 8 copies en même temps que le processeur épinglant (2 copies par cœur) et retournant le noyau du processeur vers le noyau le plus éloigné après que certaines fonction disent que la fonction 1 se termine.

Le problème auquel je fais face est de savoir comment sélectionner le processeur le plus éloigné.

Certains amis ont suggéré d'utiliser sched_getaffinity (2) et sched_setaffinity mais je ne trouve aucun bon exemple.

Aidez-nous s'il vous plaît.

Répondre

14

Pour utiliser sched_setaffinity pour rendre le processus actuel terme sur le noyau 7 vous faites ceci:

cpu_set_t my_set;  /* Define your cpu_set bit mask. */ 
CPU_ZERO(&my_set);  /* Initialize it all to 0, i.e. no CPUs selected. */ 
CPU_SET(7, &my_set);  /* set the bit that represents core 7. */ 
sched_setaffinity(0, sizeof(cpu_set_t), &my_set); /* Set affinity of tihs process to */ 
                /* the defined mask, i.e. only 7. */ 

Voir http://linux.die.net/man/2/sched_setaffinity & http://www.gnu.org/software/libc/manual/html_node/CPU-Affinity.html pour plus d'informations.

5

N'utilisez pas CPU_SETSIZE comme paramètre cpusetsize pour l'affinité sched_ [set | get]. Les noms sont trompeurs mais c'est faux. Le makro CPU_SETSIZE est (en citant man 3 cpu_set) "une valeur supérieure au nombre maximum de CPU pouvant être stocké dans cpu_set_t." Vous devez utiliser

sched_setaffinity(0, sizeof(cpu_set_t), &my_set); 

à la place.

Questions connexes