Ich benutzte das numactl mit der Option --physcpubind. Handbuch sagt:numactl --physcpubind
--physcpubind=cpus, -C cpus
Only execute process on cpus. Etc...
Sagen wir, ich NUMA-System mit 3 NUMA-Knoten haben, wobei jeder von ihnen vier Kerne hat. NUMA-Knoten 0 hat 0, 1, 2, 3 als Kernnummern. NUMA Knoten 1 hat 4,5,6,7, und NUMA Knoten 2 hat 8,9,10,11. Meine Frage ist, lassen Sie uns sagen, dass ich das Programm ausführen wie folgt:
export OMP_NUM_THREADS=6
numactl --physcpubind=0,1,4,5,8,9 ./program
also werde ich mein Programm mit 6 Threads ausgeführt werden, und Ich wünsche ihnen 0,1,4,5,8 auf CPU-Kerne zu sein, 9. Zum Beispiel, wenn zu einem bestimmten Zeitpunkt während des Programms Threads 0-5 CPU-Kerne 0, 1, 4, 5, 8, 9 (Setup1) zugeordnet sind. Ist es möglich, dass zu einem anderen Zeitpunkt während der Programmausführung Thread 0 auf dem CPU-Kern 9 läuft und so weiter? I.e. Wird es eine Thread-Migration zwischen CPU-Kernen geben? Oder die Threads werden eindeutig an CPU-Kerne gebunden (wie in Setup1)? Vielen Dank.
physcpubind sollte eine Schnittstelle zu [sched_setaffinity] (http://linux.die.net/man/2/sched_setaffinity) sein, so dass es cpuset des Prozesses und aller Threads ändert. Jeder Thread darf auf einer beliebigen CPU von dem CPU-Satz laufen, die Migration ist zwischen jeder CPU aus dem CPU-Satz erlaubt. Wenn Sie Threads an CPUs binden möchten, verwenden Sie sched_setaffinity oder pthread_setaffinity_np direkt in jedem Thread. Oder legen Sie die Affinität über die OMP-Bibliothek fest: http://StackOverflow.com/a/8325730/196561, z. mit dem Befehl 'export OMP_PROC_BIND = true'. – osgx
@osgx Danke. Kannst du diese Frage beantworten? Vielen Dank. – tiki