2012-05-07 2 views
11

ichVerwendung von sched_getaffinity (2) und sched_setaffinity (2). Bitte geben Beispielcode in C-Programm verwenden

Run 16 Kopien gleichzeitig mit Prozessor Pinning (2 Kopien pro Kern)

Run 8 Kopien gleichzeitig mit Prozessor Pinning (2 Kopien pro Kern) versuchen und Flipping Prozessorkern bis zum äußersten Kern nach bestimmter Funktion sagen Funktion 1 beendet.

Das Problem, das mir gegenübersteht, ist, wie man den am weitesten entfernten Prozessor auswählt.

Einige Freunde vorgeschlagen, sched_getaffinity (2) und sched_etaffinity zu verwenden, aber ich finde keine guten Beispiele.

Bitte helfen.

Antwort

14

sched_setaffinity So verwenden Sie den aktuellen Prozess laufen auf Kern machen 7 Sie dies tun:

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

Siehe für weitere Informationen http://linux.die.net/man/2/sched_setaffinity & http://www.gnu.org/software/libc/manual/html_node/CPU-Affinity.html.

5

Verwenden Sie CPU_SETSIZE nicht als cpusetsize-Parameter für die Affinität sched_ [set | get]. Die Namen sind irreführend, aber das ist falsch. Die Makro CPU_SETSIZE ist (Zitat von man 3 cpu_set) "ein Wert eins größer als die maximale CPU-Nummer, die in cpu_set_t gespeichert werden kann." Sie haben

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

stattdessen zu verwenden.

Verwandte Themen