2012-05-07 5 views
11

Sto cercando diCome usare sched_getaffinity (2) e sched_setaffinity (2). Si prega di dare esempio di codice da utilizzare nel programma C

Run 16 copie in concomitanza con processore pinning (2 copie per core)

Run 8 copie in concomitanza con processore pinning (2 copie per core) e capovolgere il core del processore verso il nucleo più lontano dopo che certe funzioni dicono che la funzione 1 finisce.

Il problema che sto affrontando è come selezionare il processore più lontano.

Alcuni amici suggeriscono di usare sched_getaffinity (2) e sched_setaffinity ma non trovo alcun buon esempio.

Per favore aiuto.

risposta

14

Per utilizzare sched_setaffinity per far funzionare il processo in corso sul core 7 si esegue questa operazione:

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

Vedi http://linux.die.net/man/2/sched_setaffinity & http://www.gnu.org/software/libc/manual/html_node/CPU-Affinity.html per maggiori informazioni.

5

Non utilizzare CPU_SETSIZE come parametro cpusetsize per sched_ [set | get] affinità. I nomi sono fuorvianti, ma questo è sbagliato. Il makro CPU_SETSIZE è (citando man 3 cpu_set) "un valore maggiore del numero massimo di CPU che può essere memorizzato in cpu_set_t." Devi usare

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

invece.

Problemi correlati