2012-05-07 5 views
11

Estoy tratando deCómo usar sched_getaffinity (2) y sched_setaffinity (2). Por favor, dar ejemplo de código para utilizar en el programa de C

Run 16 copias simultáneamente con procesador de fijar (2 copias por núcleo)

Run 8 copias simultáneamente con el procesador de la fijación (2 copias por núcleo) y volteando el núcleo del procesador al núcleo más alejado después de cierta función, digamos que la función 1 finaliza.

El problema que estoy enfrentando es cómo seleccionar el procesador más lejano.

Algunos amigos sugirieron usar sched_getaffinity (2) y sched_setaffinity pero no encontré ningún buen ejemplo.

Por favor ayuda.

Respuesta

14

Para utilizar sched_setaffinity para hacer que el proceso de ejecución actual en el núcleo 7 haces esto:

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. */ 

Ver http://linux.die.net/man/2/sched_setaffinity & http://www.gnu.org/software/libc/manual/html_node/CPU-Affinity.html para obtener más información.

5

No use CPU_SETSIZE como parámetro cpusetsize para sched_ [set | get] affinity. Los nombres son engañosos pero esto es incorrecto. El makro CPU_SETSIZE es (citando a man 3 cpu_set) "un valor uno mayor que el número máximo de CPU que se puede almacenar en cpu_set_t". Usted tiene que usar

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

lugar.

Cuestiones relacionadas