¿Existe un método progamatico para establecer la afinidad de la CPU por un proceso en c/C++ para el sistema operativo Linux?CPU Affinity
Respuesta
Necesita usar sched_setaffinity(2)
.
Por ejemplo, para funcionar en las CPU 0 y sólo el 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 que el proceso actual, suministrar un PID si se trata de algún otro proceso que desea controlar).
Véase también sched_getcpu(3)
.
Utilice sched_setaffinity en el nivel de proceso o pthread_attr_setaffinity_np para subprocesos individuales.
En resumen
unsigned long mask = 7; /* processors 0, 1, and 2 */
unsigned int len = sizeof(mask);
if (sched_setaffinity(0, len, &mask) < 0) {
perror("sched_setaffinity");
}
Buscar en CPU Affinity para más detalles
debe usar el tipo correcto y las macros para esto (ej. 'cpu_set_t' y' CPU_SET') - no hay garantía de que los bits en 'long' estén en el lugar correcto. – Alnitak
he hecho muchos esfuerzos para darse cuenta de lo que está sucediendo, así que añadir a respuesta para ayudar a la gente como yo (yo uso gcc
compilador en Linux menta)
#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 añadir estas opciones al comando del compilador: Debido a que el sistema operativo puede asignar un proceso para el núcleo en particular, puede añadir este GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=2,3"
en el fichero de comida ubicado en /etc/default
y la carrera sudo update-grub
en terminal para reservar los núcleos que desea
- 1. asp.net mvc3 request thread affinity
- 2. Afinidad de OpenMP y CPU
- 3. cpu vs gpu - cuando la CPU es mejor
- 4. GPU lee desde CPU o CPU escribe en la GPU?
- 5. Emulación de CPU 6502
- 6. consulta WMI - CPU LoadPercentage
- 7. Tomcat consume alta CPU
- 8. C++ CPU Registrar uso
- 9. CPU Usage y Object.wait
- 10. java usando 100% cpu
- 11. trampolín requiere demasiada CPU
- 12. cpu cores vs hilos
- 13. C# Threading CPU estacionadas?
- 14. Apache usa una CPU excesiva
- 15. Carga de CPU desde Java
- 16. Alineación de CPU y datos
- 17. Android - uso de memoria/CPU
- 18. clr.sll! StrongNameSignatureVerification Consumo de CPU
- 19. Glassfish: alto uso de CPU
- 20. Cálculo del uso de CPU
- 21. Flash/Actionscript Analizador de CPU
- 22. MySQL alto uso de CPU
- 23. ¿Es intensivo el CPU setInterval?
- 24. CPU de ensamblaje y multinúcleo
- 25. sleep() silencia silenciosamente la CPU
- 26. ¿'Lock' tarda tiempo de CPU?
- 27. Hung JVM consume 100% CPU
- 28. Código de C++ para la carga de la CPU y la temperatura de la CPU
- 29. ¿quién o cómo cambia los modos de procesador, estados de CPU, niveles de privilegios de CPU?
- 30. ¿Tiempo de CPU de usuario frente a tiempo de CPU del sistema?
Esto podría complementar la técnica: para consultar la CPU el hilo se está ejecutando actualmente en usar esto: –
ScrollerBlaster
no se olvide de definir _GNU_SOURCE_ al compilar –
, por ejemplo, agregue al comando gcc "-D _GNU_SOURCE" – Simon