programa procesador para nucleos make likes hashtags generador for establecer asignar all afinidad c linux smp affinity

procesador - Afinidad de CPU



make hashtags (4)

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


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 compilador gcc en linux mint)

#include <sched.h> 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 compilador: -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



Necesitas usar sched_setaffinity(2) .

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

#define _GNU_SOURCE #include <sched.h> 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) .