Antworten:
Innerhalb des Prozesses wäre der Aufruf sched_setaffinity()
, oder für pthreads Zeug,pthread_setaffinity_np()
Wenn Sie sich Sorgen über die CPU-Affinität Ihres Programms machen, kann es sich lohnen, auch auf die Speicherzuweisung zu achten. Größere Systeme mit Speicher, der an mehr als einen Controller angeschlossen ist (dh mehrere CPU-Sockel, jeder mit einem eigenen), weisen eine variable Latenz und Bandbreite zwischen verschiedenen CPU-Speicherpaaren auf. Sie möchten auch die NUMA-Affinität untersuchen, indem Sie den numactl
Befehl oder die Systemaufrufe verwenden, mit denen er funktioniert. Bei einem Programm, an dem ich gearbeitet habe, wurde die Leistung um 10% verbessert.
taskset -c 1-3 ./a.out arg1 arg2
Startet den a.out
Prozess mit den angegebenen Argumenten und der angegebenen Affinität für die Prozessoren 1, 2 oder 3 (nullbasiert).
Hier ist ein minimales C-Testprogramm, mit dem Sie es in Aktion sehen können: https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -c / 50117787 # 50117787
taskset -p -c 1,3 45678
statttaskset -c 1,3 -p 45678
; dh, dass das-c 1,3
eine Maskenspezifikation ist und als solche zwischen das-p
und das gesetzt werden musspid
.