Ejecutar 2 hilos en un procesador con HT
-
Buenas. Tengo un PC de dos nucleos con HT y tengo una duda sobre la gestión de procesos. Si ejecuto un programa que lanza dos hilos de ejecución, ¿es posible que esos dos hilos se estén ejecutando en un solo núcleo? Es decir, que casualmente se estén usando dos "nucleos" lógicos correspondientes a un nucleo físico.
Usa Windows 7.
Gracias.
-
@cobito en mi opinión depende de la carga de trabajo, el SO balancea la carga según le parece mejor. Hay orden pero hoy por hoy que hay 100 hilos de ejecución simultáneos pues es algo bastante aleatorio que va rotando según se va procesando. Hay opciones que tienen que ver con la prioridad y la afinidad que dan ese orden y también pueden ajustarse manualmente desde el administrador de tareas. Las tareas del background no tendrán alta prioridad y se van ejecutando en los huecos libres mientras otras con alta prioridad ocupan más ciclos por segundo y se procesan más rápido.
El caso es que poniendo el hipotético que el procesador solo tuviera dos hilos a procesar seguramente irían al core0 y core1 que corresponden a los dos núcleos físicos y estaría usando el 70% del procesador (el 100% solo se lograría con 4 hilos para usar el HT). Ahora si hay más hilos a procesar estos pasarán a la cola y irán automáticamente a donde haya "hueco" que puede ser núcleos físicos o no, y una vez esa instrucción está lista la siguiente pasa a la cola y va al siguiente hueco etc. etc. y así sería aleatorio donde se está procesando la instrucción. Ahora bien yo entiendo que para que un procesador no use uno de sus núcleos solo ocurriría en fracciones de tiempo muy cortas cuando hay una carga de proceso muy baja.
-
@bm4n En el supuesto sólo se usan la mitad de los hilos disponibles. No entiendo cuando dices que al usar dos hilos en un micro de 2 nucleos HT se estaría usando el 70% del procesador. Creía que se usaba el 100% físico y el 50% lógico y que el 50% restante era una ayuda para aprovechar la segmentación.
He hecho una prueba rápida y veo que al ejecutar dos procesos, se reparten entre todos los hilos disponibles a aproximadamente un 50%. Es decir, que se están usando todos los nucleos lógicos a un 50%. Creía que se usarían sólo dos núcleos lógicos (presumiblemente correspondientes a dos núcleos físicos) al 100% y los otros dos se mantendrían en 0%.
La verdad es que no entiendo demasiado este comportamiento. ¿Podría ser que el 50% de un nucleo lógico (el mostrado en el Administrador de Tareas) sea un medio núcleo físico y la otra mitad, medio nucleo HT? Me parece una gestión un poco extraña, pero ¿si no?.
Desde luego en Linux el tema es bastante diferente.
-
@cobito no se si habrán cambiado o mejorado el comportamiento del HT pero cuando se introdujo funcionaba de la siguiente manera: hay partes del pipeline que al resolver un hilo están inactivas en un núcleo. Con lo que el HT añade un segundo hilo de trabajo para que esas partes inactivas se puedan usar procesando operaciones de otro hilo. De esa manera tienes dos hilos de trabajo procesandose en un solo núcleo que trabaja más plenamente al no tener ya esos "huecos". Si un procesador con HT solo trabaja con los núcleos físicos (con el HT desactivado) nunca dará el 100% de su potencial.
Una de las principales razones por las cuales alrededor del 65% de los recursos de ejecución de su CPU permanecen inactivos es debido al hecho de que la CPU solo puede ejecutar un hilo de instrucciones a la vez. Piense en un hilo como una colección de instrucciones relacionadas con un solo programa, por ejemplo, ejecutar el corrector ortográfico en Word enviaría un hilo de instrucciones a la CPU para comenzar a verificar su documento en busca de errores ortográficos. Resulta que las instrucciones dentro de un hilo en particular utilizan mayoritariamente las mismas unidades de ejecución una y otra vez, dejando las unidades restantes inactivas. La idea detrás de Hyper-Threading es enviar múltiples hilos a la CPU con la esperanza de que las unidades de ejecución inactivas sean utilizadas por diferentes hilos. Intel afirma que con HT habilitado la utilización de las unidades de ejecución del Pentium 4 puede saltar a alrededor del 50%, lo cual no es una mala mejora para una modificación tan pequeña en el núcleo.
https://www.anandtech.com/show/1031/4Lo que comentas tiene cierto sentido es posible que esté balanceando la carga entre sus capacidades de la manera que le parezca al sistema más optima. Si quieres hacer una prueba simplemente mira cuanto tarda en procesar esa tarea con el HT activado, poniendo esa tarea a ejecutar solo en los núcleos físicos (lo puedes hacer manualmente en el administrador de tareas), con el HT desactivado en BIOS... haz pruebas y así te darás cuenta de si realmente es más eficiente ejecutar 2 procesos exclusivamente en los núcleos fiscos o es mejor ejecutar esos 2 procesos en 4 hilos aunque dos sean el HT (yo apuesto por el segundo escenario).
PD. Pongo una imagen y un link a un articulo de Anand que lo explica mejor que yo, también como afectan los SO a esto y que el HT al contrario de restar rendimiento lo suele sumar.