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
Use sched_setaffinity en el nivel de proceso, o pthread_attr_setaffinity_np para hilos individuales.
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)
.