Respuestas:
Dentro del proceso, la llamada sería sched_setaffinity()
, o para cosas de pthreads,pthread_setaffinity_np()
En una nota relacionada, si te preocupa la afinidad de la CPU de tu programa, puede valer la pena prestar atención también a cómo está haciendo la asignación de memoria. Los sistemas más grandes con memoria conectada a más de un controlador (es decir, múltiples zócalos de CPU, cada uno con el suyo propio) tendrán latencia variable y ancho de banda entre diferentes pares de CPU-memoria. También querrá examinar la afinidad de NUMA, utilizando el numactl
comando o las llamadas al sistema con las que funciona. Un programa en el que trabajé obtuvo una mejora del rendimiento del 10% de esto.
taskset -c 1-3 ./a.out arg1 arg2
inicia el a.out
proceso con argumentos y afinidad dados a los procesadores 1, 2 o 3 (basados en cero).
Aquí hay un programa de prueba C mínimo que se puede usar para verlo en acción: /programming/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from -c / 50117787 # 50117787
taskset -p -c 1,3 45678
más quetaskset -c 1,3 -p 45678
; es decir, que-c 1,3
es una especificación de máscara y, como tal, debe colocarse entre el-p
y elpid
.