Hyper-threading (oficialmente llamado Hyper-Threading Technology o HT Technology y abreviado como HTT o HT ) es la implementación patentada de multithreading simultáneo (SMT) de Intel que se utiliza para mejorar la paralelización de los cálculos (realizar múltiples tareas a la vez) realizados en microprocesadores x86 . Se introdujo en los procesadores de servidores Xeon en febrero de 2002 y en los procesadores de escritorio Pentium 4 en noviembre de 2002. [4] Desde entonces, Intel ha incluido esta tecnología en las CPU de las series Itanium , Atom y Core 'i' , entre otras. [5]
Para cada núcleo de procesador que está físicamente presente, el sistema operativo direcciona dos núcleos virtuales (lógicos) y comparte la carga de trabajo entre ellos cuando es posible. La función principal del hyper-threading es aumentar la cantidad de instrucciones independientes en la canalización; Aprovecha la arquitectura superescalar , en la que múltiples instrucciones operan con datos separados en paralelo . Con HTT, un núcleo físico aparece como dos procesadores para el sistema operativo, lo que permite la programación simultánea de dos procesos por núcleo. Además, dos o más procesos pueden utilizar los mismos recursos: si los recursos para un proceso no están disponibles, otro proceso puede continuar si sus recursos están disponibles.
Además de requerir soporte simultáneo de subprocesos múltiples en el sistema operativo, el hiperprocesamiento solo se puede utilizar correctamente con un sistema operativo específicamente optimizado para ello. [6]
La tecnología Hyper-Threading es una forma de tecnología de subprocesos múltiples simultánea introducida por Intel, mientras que el concepto detrás de la tecnología ha sido patentado por Sun Microsystems . Arquitectónicamente, un procesador con tecnología Hyper-Threading consta de dos procesadores lógicos por núcleo, cada uno de los cuales tiene su propio estado arquitectónico de procesador. Cada procesador lógico puede detenerse, interrumpirse o dirigirse individualmente para ejecutar un subproceso específico, independientemente del otro procesador lógico que comparte el mismo núcleo físico. [8]
A diferencia de una configuración tradicional de doble procesador que utiliza dos procesadores físicos separados, los procesadores lógicos en un núcleo de hiperproceso comparten los recursos de ejecución. Estos recursos incluyen el motor de ejecución, las cachés y la interfaz del bus del sistema; compartir recursos permite que dos procesadores lógicos trabajen entre sí de manera más eficiente y permite que un procesador lógico tome prestados recursos de un núcleo lógico estancado (suponiendo que ambos núcleos lógicos estén asociados con el mismo núcleo físico). Un procesador se detiene cuando debe esperar los datos que ha solicitado para terminar de procesar el hilo actual. El grado de beneficio que se observa al utilizar un procesador con hiperprocesos o multinúcleo depende de las necesidades del software y de qué tan bien están escritos este y el sistema operativo para administrar el procesador de manera eficiente. [8]
Hyper-threading funciona duplicando ciertas secciones del procesador (aquellas que almacenan el estado arquitectónico ) pero no duplicando los principales recursos de ejecución . Esto permite que un procesador Hyper-Threading aparezca como el procesador "físico" habitual más un procesador " lógico " adicional para el sistema operativo host (los sistemas operativos que no reconocen HTT ven dos procesadores "físicos"), lo que permite al sistema operativo programar dos subprocesos. o procesos de forma simultánea y adecuada. Cuando la tarea actual no utiliza los recursos de ejecución en un procesador con hiperprocesos, y especialmente cuando el procesador está parado, esos recursos de ejecución se pueden usar para ejecutar otra tarea programada. (El procesador puede detenerse debido a una pérdida de caché , una predicción errónea de rama o una dependencia de datos ). [9]
Esta tecnología es transparente para los sistemas operativos y programas. Lo mínimo que se requiere para aprovechar el hyper-threading es soporte de multiprocesamiento simétrico (SMP) en el sistema operativo, ya que los procesadores lógicos no parecen diferentes al sistema operativo que los procesadores físicos.
Es posible optimizar el comportamiento del sistema operativo en sistemas multiprocesador con capacidad de hiperprocesamiento. Por ejemplo, considere un sistema SMP con dos procesadores físicos, ambos con hiperprocesos (para un total de cuatro procesadores lógicos). Si el programador de subprocesos del sistema operativo no reconoce el hiperprocesamiento, tratará a los cuatro procesadores lógicos de la misma manera. Si sólo dos subprocesos son elegibles para ejecutarse, podría optar por programar esos subprocesos en los dos procesadores lógicos que pertenecen al mismo procesador físico. Ese procesador estaría extremadamente ocupado y compartiría recursos de ejecución, mientras que el otro procesador permanecería inactivo, lo que provocaría un rendimiento más deficiente que si los subprocesos estuvieran programados en diferentes procesadores físicos. Este problema se puede evitar mejorando el programador para tratar los procesadores lógicos de manera diferente a los procesadores físicos, lo cual es, en cierto sentido, una forma limitada de los cambios en el programador necesarios para los sistemas NUMA .
El primer artículo publicado que describe lo que ahora se conoce como hyper-threading en una computadora de propósito general fue escrito por Edward S. Davidson y Leonard. E. Shar en 1973. [10]
Denelcor, Inc. introdujo subprocesos múltiples con el procesador de elementos heterogéneos (HEP) en 1982. La canalización HEP no podía contener múltiples instrucciones del mismo proceso. Solo se permitía que una instrucción de un proceso determinado estuviera presente en la canalización en cualquier momento. Si una instrucción de un proceso determinado bloqueara la tubería, las instrucciones de otros procesos continuarían después de que se drenara la tubería.
La patente estadounidense para la tecnología detrás del hyper-threading fue concedida a Kenneth Okin de Sun Microsystems en noviembre de 1994. En aquel momento, la tecnología del proceso CMOS no estaba lo suficientemente avanzada como para permitir una implementación rentable. [11]
Intel implementó Hyper-Threading en un procesador de arquitectura x86 en 2002 con el Xeon basado en Foster MP . También se incluyó en el Pentium 4 basado en Northwood a 3,06 GHz ese mismo año, y desde entonces permaneció como una característica en todos los procesadores Pentium 4 HT, Pentium 4 Extreme Edition y Pentium Extreme Edition. Las líneas de procesadores Intel Core y Core 2 (2006) que sucedieron a la línea de modelos Pentium 4 no utilizaban hyper-threading. Los procesadores basados en la microarquitectura Core no tenían hyper-threading porque la microarquitectura Core era descendiente de la microarquitectura P6 más antigua . La microarquitectura P6 se utilizó en iteraciones anteriores de procesadores Pentium, a saber, Pentium Pro , Pentium II y Pentium III (más sus derivados Celeron y Xeon en ese momento). Windows 2000 SP3 y Windows XP SP1 han agregado soporte para Hyper-Threading.
Intel lanzó la microarquitectura Nehalem (Core i7) en noviembre de 2008, en la que el hyper-threading regresó. Los procesadores Nehalem de primera generación contenían cuatro núcleos físicos y efectivamente escalaban a ocho subprocesos. Desde entonces, se han lanzado modelos de dos y seis núcleos, con cuatro y doce subprocesos respectivamente. [12] Los núcleos Intel Atom anteriores eran procesadores en orden, a veces con capacidad de hiperprocesamiento, para PC móviles de bajo consumo y PC de escritorio de bajo precio. [13] El Itanium 9300 se lanzó con ocho subprocesos por procesador (dos subprocesos por núcleo) a través de una tecnología mejorada de hiperprocesamiento. El siguiente modelo, el Itanium 9500 (Poulson), presenta una arquitectura de 12 ediciones, con ocho núcleos de CPU con soporte para ocho núcleos virtuales más mediante hyper-threading. [14] Los chips de servidor Intel Xeon 5500 también utilizan hyper-threading bidireccional. [15] [16]
Según Intel, la primera implementación de Hyper-Threading utilizó solo un 5% más de área de matriz que el procesador comparable sin Hyper-Threading, pero el rendimiento fue entre un 15% y un 30% mejor. [17] [18] Intel afirma una mejora de rendimiento de hasta un 30 % en comparación con un Pentium 4 multihilo no simultáneo, por lo demás idéntico. Tom's Hardware afirma: "En algunos casos, un P4 funcionando a 3,0 GHz con HT activado puede incluso superar a un P4 funcionando a 3,6 GHz con HT apagado." [19] Intel también afirma importantes mejoras de rendimiento con un procesador Pentium 4 habilitado para hyper-threading en algunos algoritmos de inteligencia artificial.
En general, el historial de rendimiento de Hyper-Threading fue mixto al principio. Como señala un comentario sobre informática de alto rendimiento de noviembre de 2002: [20]
Hyper-Threading puede mejorar el rendimiento de algunas aplicaciones MPI , pero no de todas. Dependiendo de la configuración del clúster y, lo más importante, de la naturaleza de la aplicación que se ejecuta en el clúster, las ganancias de rendimiento pueden variar o incluso ser negativas. El siguiente paso es utilizar herramientas de desempeño para comprender qué áreas contribuyen a las ganancias de desempeño y qué áreas contribuyen a su degradación.
Como resultado, las mejoras de rendimiento dependen en gran medida de la aplicación; [21] sin embargo, cuando se ejecutan dos programas que requieren toda la atención del procesador, puede parecer que uno o ambos programas se ralentizan ligeramente cuando se activa la tecnología Hyper-Threading. [22] Esto se debe a que el sistema de reproducción del Pentium 4 ocupa valiosos recursos de ejecución, igualando los recursos del procesador entre los dos programas, lo que agrega una cantidad variable de tiempo de ejecución. Los procesadores Pentium 4 "Prescott" y Xeon "Nocona" recibieron una cola de reproducción que reduce el tiempo de ejecución necesario para el sistema de reproducción y supera por completo la penalización de rendimiento. [23]
Según un análisis realizado por Intel en noviembre de 2009, los impactos en el rendimiento del hyper-threading dan como resultado un aumento de la latencia general en caso de que la ejecución de los hilos no dé como resultado ganancias significativas en el rendimiento general, que varían [21] según la aplicación. En otras palabras, la latencia de procesamiento general aumenta significativamente debido al hyper-threading, y los efectos negativos se vuelven menores a medida que hay más subprocesos simultáneos que pueden utilizar de manera efectiva la utilización de recursos de hardware adicional proporcionada por el hyper-threading. [24] Se encuentra disponible un análisis de rendimiento similar para los efectos del hyper-threading cuando se utiliza para manejar tareas relacionadas con la gestión del tráfico de red, como el procesamiento de solicitudes de interrupción generadas por controladores de interfaz de red (NIC). [25] Otro artículo afirma que no hay mejoras en el rendimiento cuando se utiliza hyper-threading para el manejo de interrupciones. [26]
Cuando se lanzaron los primeros procesadores HT, muchos sistemas operativos no estaban optimizados para la tecnología Hyper-Threading (por ejemplo, Windows 2000 y Linux anteriores a 2.4). [27]
En 2006, el hyper-threading fue criticado por su ineficiencia energética. [28] Por ejemplo, ARM (una empresa especializada en diseño de CPU de bajo consumo), afirmó que el multiproceso simultáneo puede utilizar hasta un 46% más de energía que los diseños ordinarios de doble núcleo. Además, afirmaron que SMT aumenta la destrucción de caché en un 42 %, mientras que el doble núcleo produce una disminución del 37 %. [29]
En 2010, ARM dijo que podría incluir subprocesos múltiples simultáneos en sus futuros chips; [30] sin embargo, esto fue rechazado a favor de su diseño de 64 bits de 2012. [31] ARM produjo núcleos SMT en 2018. [32]
En 2013, Intel abandonó SMT en favor de la ejecución fuera de orden para sus núcleos de procesador Silvermont , ya que descubrieron que esto ofrecía un mejor rendimiento con una mejor eficiencia energética que una menor cantidad de núcleos con SMT. [33]
En 2017, se reveló que los procesadores Skylake y Kaby Lake de Intel tenían un error en la implementación de Hyper-Threading que podía provocar la pérdida de datos. [34] Posteriormente se publicaron actualizaciones de microcódigo para solucionar el problema. [35]
En 2019, con Coffee Lake , Intel dejó temporalmente de incluir hyper-threading en los procesadores de escritorio Core i7 convencionales, excepto en las piezas Core i9 de gama más alta o las CPU Pentium Gold. [36] También comenzó a recomendar deshabilitar el hyper-threading, ya que se revelaron nuevos ataques de vulnerabilidad de la CPU que podrían mitigarse deshabilitando HT. [37]
En mayo de 2005, Colin Percival demostró que un hilo malicioso en un Pentium 4 puede utilizar un ataque de canal lateral basado en temporización para monitorear los patrones de acceso a la memoria de otro hilo con el que comparte un caché, permitiendo el robo de información criptográfica. En realidad, esto no es un ataque de sincronización , ya que el hilo malicioso mide únicamente el tiempo de su propia ejecución. Las posibles soluciones a esto incluyen que el procesador cambie su estrategia de desalojo de caché o que el sistema operativo impida la ejecución simultánea, en el mismo núcleo físico, de subprocesos con diferentes privilegios. [38] En 2018, el sistema operativo OpenBSD deshabilitó el hyper-threading "para evitar la posible fuga de datos de aplicaciones a otro software" causada por las vulnerabilidades Foreshadow/L1TF . [39] [40] En 2019, un conjunto de vulnerabilidades llevó a los expertos en seguridad a recomendar la desactivación del hyper-threading en todos los dispositivos. [41]
{{cite book}}
: Mantenimiento CS1: falta el editor de la ubicación ( enlace )La carga por CPU se puede observar usando la utilidad mpstat, pero tenga en cuenta que en los procesadores con hyperthreading (HT), cada hyperthreading se representa como una CPU separada.
Para el manejo de interrupciones, HT no ha mostrado ningún beneficio en las pruebas iniciales, por lo tanto, limite la cantidad de colas a la cantidad de núcleos de CPU en el sistema.
{{cite web}}
: Mantenimiento CS1: URL no apta ( enlace )