Afinidad de CPU

¿Existe algún método progamatico para establecer la afinidad de la CPU por un proceso en c / c ++ para el sistema operativo Linux?

    Necesitas usar sched_setaffinity(2) .

    Por ejemplo, ejecutar solo en las CPU 0 y 2:

     #define _GNU_SOURCE #include  cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(0, &mask); CPU_SET(2, &mask); result = sched_setaffinity(0, sizeof(mask), &mask); 

    ( 0 para el primer parámetro significa el proceso actual, suministre un PID si es otro proceso que desea controlar).

    Ver también sched_getcpu(3) .

    Use sched_setaffinity en el nivel de proceso, o pthread_attr_setaffinity_np para hilos individuales.

    En breve

     unsigned long mask = 7; /* processors 0, 1, and 2 */ unsigned int len = sizeof(mask); if (sched_setaffinity(0, len, &mask) < 0) { perror("sched_setaffinity"); } 

    Mire en CPU Affinity para más detalles

    He hecho muchos esfuerzos para darme cuenta de lo que está sucediendo, así que agrego esta respuesta para ayudar a las personas como yo (uso el comstackdor gcc en linux mint)

     #include  cpu_set_t mask; inline void assignToThisCore(int core_id) { CPU_ZERO(&mask); CPU_SET(core_id, &mask); sched_setaffinity(0, sizeof(mask), &mask); } int main(){ //cal this: assignToThisCore(2);//assign to core 0,1,2,... return 0; } 

    Pero no se olvide de agregar esta opción al comando del comstackdor: -D _GNU_SOURCE Debido a que el sistema operativo puede asignar un proceso al núcleo particular, puede agregar este GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=2,3" al archivo grub ubicado en /etc/default y run sudo update-grub en el terminal para reservar los núcleos que quieras