Risposte:
All'interno del processo, la chiamata sarebbe sched_setaffinity()
, o per roba di pthreads,pthread_setaffinity_np()
In una nota correlata, se ti preoccupi dell'affinità della CPU del tuo programma, potrebbe essere utile prestare attenzione anche a come sta facendo l'allocazione di memoria. I sistemi più grandi con memoria collegata a più di un controller (ovvero più socket CPU, ognuno con i propri) avranno latenza e larghezza di banda variabili tra coppie di memoria CPU diverse. Ti consigliamo di esaminare anche l'affinità NUMA, utilizzando il numactl
comando o le chiamate di sistema con cui funziona. Un programma a cui ho lavorato ha ottenuto un miglioramento delle prestazioni del 10% da questo.
Devi installare schedutils
(utilità di pianificazione di Linux). L'ho usato sul mio desktop Ubuntu.
Collegamento SF
taskset -c 1-3 ./a.out arg1 arg2
lancia il a.out
processo con determinati argomenti e affinità impostata sui processori 1, 2 o 3 (a base zero).
Ecco un programma di test C minimo che può essere utilizzato per vederlo in azione: 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
piuttosto chetaskset -c 1,3 -p 45678
; vale a dire che-c 1,3
è una specifica di maschera e, come tale, deve essere posizionata tra la-p
e lapid
.