Ho usato taskset per questo. Se hai installato taskset, qualcosa come:
taskset -cp 0,2 45678
imposterebbe il processo con id 45678 in modo che abbia un'affinità con cpus 1 e 3.
All'interno del processo, la chiamata sarebbe sched_setaffinity()
, o per cose relative ai pthread, pthread_setaffinity_np()
In una nota correlata, se ti preoccupi dell'affinità della CPU del tuo programma, potrebbe valere la pena prestare attenzione anche a come sta eseguendo l'allocazione della memoria. I sistemi più grandi con memoria collegata a più di un controller (ovvero più socket CPU, ciascuno con il proprio) avranno latenza e larghezza di banda variabili tra le diverse coppie CPU-memoria. Ti consigliamo di esaminare anche l'affinità NUMA, utilizzando il numactl
comando o le chiamate di sistema con cui funziona. Un programma su cui ho lavorato ha ottenuto un miglioramento delle prestazioni del 10% da questo.
Devi installare schedutils
(utilità di pianificazione Linux). L'ho usato sul mio desktop Ubuntu.
Collegamento SF