Cuando ejecuto un programa de un único subproceso que he escrito en mi núcleo cuádruple Intel, puedo ver en el Administrador de tareas de Windows que en realidad los cuatro núcleos de mi CPU están más o menos activos. Un núcleo es más activo que los otros tres, pero también hay actividad en esos. No hay otro programa (incluido el núcleo del sistema operativo, por supuesto) en ejecución que sea plausible para esa actividad. Y cuando cierro mi programa, toda la actividad y todos los núcleos descienden a casi cero. Todo lo que queda es un pequeño "ruido" en los núcleos, por lo que estoy bastante seguro de que toda la actividad visible proviene directa o indirectamente (como la invocación de rutinas del sistema) de mi programa.¿Es posible que un programa de subproceso único se ejecute simultáneamente en más de un núcleo de CPU?
¿Es posible que el sistema operativo o los núcleos mismos intenten equilibrar algún código o ejecución en los cuatro núcleos, incluso si no es un programa multiproceso? ¿Tiene algún enlace que documente esta técnica?
Algunas informaciones sobre el programa: es una aplicación de consola escrita en Qt, el Administrador de tareas indica que solo se está ejecutando un subproceso. Quizás Qt usa hilos, pero yo no uso señales ni ranuras, ni ninguna GUI.
Enlace al Administrador de tareas de captura de pantalla: http://img97.imageshack.us/img97/6403/taskmanager.png
Esta pregunta es el lenguaje agnóstico y no atado a Qt/C++, sólo quiero saber si Windows o Intel hacen para equilibrar también el código de un solo subproceso en todos los núcleos. Si lo hacen, ¿cómo funciona esta técnica?
Todo lo que puedo pensar es que las rutinas del kernel, como la lectura desde el disco, están programadas en todos los núcleos, pero esto no mejorará significativamente el rendimiento ya que el código debe ejecutarse sincrónicamente con las llamadas a la API kernel.
EDITAR
¿Conoce alguna herramientas para hacer un mejor análisis de/o programas individuales y multi-hilo que el Administrador de Tareas pobres?
sí, por supuesto, a menos que esté trabajando con procesadores cuánticos, solo puede tener 1 procesador que ejecute un determinado hilo en un momento dado. Sin embargo, durante un intervalo de tiempo, ese único hilo se puede migrar a otra CPU. – ennuikiller
versión anterior de Windows (XP y versiones anteriores) NO intente mantener un proceso en el mismo núcleo, hacen exactamente lo contrario de esto de manera predeterminada. –
Es * posible * que el planificador del sistema operativo migre un proceso (más exactamente, un hilo) de un núcleo a otro, pero es muy poco probable. No sé Qt, pero me parece que una explicación más probable es que hay otros hilos detrás de la escena en Qt, que están programados en otros núcleos. Esa actividad, más la actividad del kernel y otros procesos, aparece en los otros núcleos. – Cheeso