Hyperthreading es una alternativa más barata y más lenta a tener dos núcleos
La Guía de programación del sistema Intel Manual Volumen 3 - 325384-056ES Septiembre de 2015 8.7 "ARQUITECTURA DE LA TECNOLOGÍA INTEL HYPER-THREADING" describe brevemente HT. Contiene el siguiente diagrama:
¿TODO es más lento en cuánto porcentaje en promedio en aplicaciones reales?
Hyperthreading es posible porque los núcleos de CPU individuales modernos ya ejecutan múltiples instrucciones a la vez con la tubería de instrucciones https://en.wikipedia.org/wiki/Instruction_pipelining
La canalización de instrucciones es una separación de funciones dentro de un solo núcleo para garantizar que cada parte del circuito se utilice en cualquier momento dado: memoria de lectura, instrucciones de decodificación, instrucciones de ejecución, etc.
Hyperthreading separa aún más las funciones mediante el uso de:
un único backend, que realmente ejecuta las instrucciones con su canalización.
Dual core tiene dos backends, lo que explica el mayor costo y rendimiento.
dos front-end, que toman dos secuencias de instrucciones y las ordenan para maximizar el uso de canalización del backend único evitando riesgos .
Dual core también tendría 2 front-end, uno para cada backend.
Hay casos extremos en los que el reordenamiento de instrucciones no produce ningún beneficio, lo que hace inútil el hyperthread Pero produce una mejora significativa en promedio.
Dos hyperthreads en un solo núcleo comparten más niveles de caché (TODO ¿cuántos? L1?) Que dos núcleos diferentes, que comparten solo L3, vea:
La interfaz que cada hyperthread expone al sistema operativo es similar a la de un núcleo real, y ambos pueden controlarse por separado. Por lo tanto cat /proc/cpuinfo
, me muestra 4 procesadores, aunque solo tengo 2 núcleos con 2 hyperthreads cada uno.
Sin embargo, los sistemas operativos pueden aprovechar para saber qué hyperthreads están en el mismo núcleo para ejecutar múltiples subprocesos de un programa determinado en un solo núcleo, lo que podría mejorar el uso de la caché.
Este video de LinusTechTips contiene una explicación no técnica alegre: https://www.youtube.com/watch?v=wnS50lJicXc