He usado taskset para esto. Si tiene un conjunto de tareas instalado, algo como:
taskset -cp 0,2 45678
establecería el proceso con id 45678 para tener una afinidad con cpus 1 y 3.
Dentro del proceso, la llamada sería sched_setaffinity()
, o para cosas de pthreads, pthread_setaffinity_np()
En una nota relacionada, si le preocupa la afinidad de la CPU de su programa, puede valer la pena prestar atención a cómo está haciendo la asignación de memoria también. Los sistemas más grandes con memoria conectada a más de un controlador (es decir, varios zócalos de CPU, cada uno con su propio) tendrán una latencia y un ancho de banda variables entre los diferentes pares de CPU y memoria. También querrá ver la afinidad NUMA, usando el numactl
comando o las llamadas del sistema con las que trabaja. Un programa en el que trabajé obtuvo una mejora del rendimiento del 10 % gracias a esto.
Necesitas instalar schedutils
(Utilidades del programador de Linux). Lo he usado en mi escritorio de Ubuntu.
Enlace de San Francisco