El multiprocesamiento simultáneo ( SMT ) es una técnica para mejorar la eficiencia general de las CPU superescalares con multiprocesamiento de hardware . SMT permite múltiples subprocesos de ejecución independientes para utilizar mejor los recursos que ofrecen las arquitecturas de procesadores modernas .
El término multihilo es ambiguo, porque no solo se pueden ejecutar varios subprocesos simultáneamente en un núcleo de CPU, sino también múltiples tareas (con diferentes tablas de páginas , diferentes segmentos de estado de tarea , diferentes anillos de protección , diferentes permisos de E/S , etc.). Aunque se ejecutan en el mismo núcleo, están completamente separados entre sí. El multihilo es similar en concepto a la multitarea preventiva , pero se implementa en el nivel de ejecución del subproceso en los procesadores superescalares modernos.
El multihilo simultáneo (SMT) es una de las dos principales implementaciones del multihilo, la otra forma es el multihilo temporal (también conocido como super-threading). En el multihilo temporal, solo se puede ejecutar un hilo de instrucciones en cualquier etapa de la cadena de procesamiento a la vez. En el multihilo simultáneo, se pueden ejecutar instrucciones de más de un hilo en cualquier etapa de la cadena de procesamiento a la vez. Esto se hace sin grandes cambios en la arquitectura básica del procesador: las principales adiciones necesarias son la capacidad de obtener instrucciones de varios hilos en un ciclo y un archivo de registro más grande para almacenar datos de varios hilos. La cantidad de hilos simultáneos la deciden los diseñadores del chip. Dos hilos simultáneos por núcleo de CPU son comunes, pero algunos procesadores admiten muchos más. [1]
Debido a que inevitablemente aumenta el conflicto sobre los recursos compartidos, medir o acordar su efectividad puede ser difícil. Sin embargo, la eficiencia energética medida de SMT con cargas de trabajo nativas y administradas paralelas en implementaciones históricas de Intel SMT ( hyper-threading ) de 130 nm a 32 nm encontró que en implementaciones de 45 nm y 32 nm, SMT es extremadamente eficiente energéticamente, incluso con procesadores Atom en orden. [2] En los sistemas modernos, SMT explota eficazmente la concurrencia con muy poca potencia dinámica adicional. Es decir, incluso cuando las ganancias de rendimiento son mínimas, los ahorros en el consumo de energía pueden ser considerables. [2] Algunos investigadores [ ¿ quiénes? ] han demostrado que los subprocesos adicionales se pueden usar de forma proactiva para generar un recurso compartido como un caché, para mejorar el rendimiento de otro subproceso único, y afirman que esto demuestra que SMT no solo aumenta la eficiencia. Otros [¿ quiénes? ] usan SMT para proporcionar computación redundante, para cierto nivel de detección y recuperación de errores.
Sin embargo, en la mayoría de los casos actuales, SMT trata de ocultar la latencia de la memoria , aumentar la eficiencia y aumentar el rendimiento de los cálculos por cantidad de hardware utilizado. [ cita requerida ]
En el diseño de procesadores, hay dos maneras de aumentar el paralelismo en el chip con menos requisitos de recursos: una es la técnica superescalar, que intenta explotar el paralelismo a nivel de instrucción (ILP); la otra es el enfoque multihilo que explota el paralelismo a nivel de hilo (TLP).
Superscalar significa ejecutar múltiples instrucciones al mismo tiempo, mientras que el paralelismo a nivel de subprocesos (TLP) ejecuta instrucciones de múltiples subprocesos dentro de un chip de procesador al mismo tiempo. Existen muchas formas de admitir más de un subproceso dentro de un chip, a saber:
El factor clave para distinguirlos es observar cuántas instrucciones puede emitir el procesador en un ciclo y de cuántos subprocesos provienen las instrucciones. Por ejemplo, el UltraSPARC T1 de Sun Microsystems es un procesador multinúcleo combinado con una técnica de multiproceso de grano fino en lugar de multiproceso simultáneo, ya que cada núcleo solo puede emitir una instrucción a la vez.
Aunque las CPU con multihilo existen desde la década de 1950, IBM investigó por primera vez el multihilo simultáneo en 1968 como parte del proyecto ACS-360 . [3] El primer microprocesador comercial importante desarrollado con SMT fue el Alpha 21464 (EV8). Este microprocesador fue desarrollado por DEC en coordinación con Dean Tullsen de la Universidad de California en San Diego, y Susan Eggers y Henry Levy de la Universidad de Washington. El microprocesador nunca se lanzó, ya que la línea Alpha de microprocesadores se suspendió poco antes de que HP adquiriera Compaq , que a su vez había adquirido DEC . El trabajo de Dean Tullsen también se utilizó para desarrollar las versiones con hiperprocesamiento de los microprocesadores Intel Pentium 4, como el "Northwood" y el "Prescott".
El Intel Pentium 4 fue el primer procesador de escritorio moderno en implementar multihilo simultáneo, a partir del modelo de 3,06 GHz lanzado en 2002, y desde entonces introducido en varios de sus procesadores. Intel llama a la funcionalidad Tecnología Hyper-Threading y proporciona un motor SMT básico de dos subprocesos. Intel afirma una mejora de velocidad de hasta un 30% [4] en comparación con un Pentium 4 idéntico y sin SMT. La mejora de rendimiento observada depende mucho de la aplicación; sin embargo, cuando se ejecutan dos programas que requieren la atención total del procesador, en realidad puede parecer que uno o ambos programas se ralentizan ligeramente cuando se activa el Hyper-Threading. [5] Esto se debe a que el sistema de reproducción del Pentium 4 ata valiosos recursos de ejecución, lo que aumenta la contención de recursos como ancho de banda, cachés, TLB , reordenamiento de entradas de búfer e iguala los recursos del procesador entre los dos programas, lo que agrega una cantidad variable de tiempo de ejecución. El núcleo Pentium 4 Prescott obtuvo una cola de reproducción, lo que reduce el tiempo de ejecución necesario para el sistema de reproducción. Esto fue suficiente para superar por completo esa pérdida de rendimiento. [6]
Los últimos diseños de arquitectura MIPS de Imagination Technologies incluyen un sistema SMT conocido como "MIPS MT". [7] MIPS MT proporciona elementos de procesamiento virtual de gran peso y microhilos de hardware más ligeros. RMI , una startup con sede en Cupertino, es el primer proveedor de MIPS en proporcionar un SOC de procesador basado en ocho núcleos, cada uno de los cuales ejecuta cuatro hilos. Los hilos se pueden ejecutar en modo de grano fino donde se puede ejecutar un hilo diferente en cada ciclo. También se pueden asignar prioridades a los hilos. Las CPU MIPS de Imagination Technologies tienen dos hilos SMT por núcleo.
El Blue Gene /Q de IBM tiene SMT de 4 vías.
El IBM POWER5 , anunciado en mayo de 2004, se presenta como un módulo de doble núcleo y doble chip (DCM), o como un módulo multichip de cuatro núcleos u ocho núcleos (MCM), y cada núcleo incluye un motor SMT de dos subprocesos. La implementación de IBM es más sofisticada que las anteriores, ya que puede asignar una prioridad diferente a los distintos subprocesos, es más detallada y el motor SMT se puede activar y desactivar de forma dinámica, para ejecutar mejor aquellas cargas de trabajo en las que un procesador SMT no aumentaría el rendimiento. Esta es la segunda implementación de IBM de multiproceso de hardware disponible de forma general. En 2010, IBM lanzó sistemas basados en el procesador POWER7 con ocho núcleos, cada uno con cuatro subprocesos inteligentes simultáneos. Esto cambia el modo de subproceso entre un subproceso, dos subprocesos o cuatro subprocesos según la cantidad de subprocesos de proceso que se estén programando en ese momento. Esto optimiza el uso del núcleo para un tiempo de respuesta mínimo o un rendimiento máximo. IBM POWER8 tiene 8 subprocesos simultáneos inteligentes por núcleo (SMT8).
IBM Z a partir del procesador z13 en 2013 tiene dos subprocesos por núcleo (SMT-2).
Aunque mucha gente informó que el UltraSPARC T1 de Sun Microsystems (conocido como "Niagara" hasta su lanzamiento el 14 de noviembre de 2005) y el ahora extinto procesador con nombre en código " Rock " (anunciado originalmente en 2005, pero luego de muchos retrasos cancelado en 2010) son implementaciones de SPARC enfocadas casi por completo en explotar técnicas SMT y CMP, Niagara en realidad no usa SMT. Sun se refiere a estos enfoques combinados como "CMT", y al concepto general como "Throughput Computing". El Niagara tiene ocho núcleos, pero cada núcleo tiene solo una tubería, por lo que en realidad usa subprocesos múltiples de grano fino. A diferencia de SMT, donde las instrucciones de múltiples subprocesos comparten la ventana de emisión en cada ciclo, el procesador usa una política de round robin para emitir instrucciones desde el siguiente subproceso activo en cada ciclo. Esto lo hace más similar a un procesador de barril . El procesador Rock de Sun Microsystems es diferente: tiene núcleos más complejos que tienen más de una tubería.
Oracle Corporation SPARC T3 tiene ocho subprocesos de grano fino por núcleo; SPARC T4, SPARC T5, SPARC M5, M6 y M7 tienen ocho subprocesos de grano fino por núcleo, de los cuales dos pueden ejecutarse simultáneamente.
Fujitsu SPARC64 VI tiene subprocesamiento múltiple vertical (VMT) de grano grueso. SPARC VII y los más nuevos tienen SMT de 2 vías.
Intel Itanium Montecito utiliza subprocesamiento múltiple de grano grueso y Tukwila y los más nuevos utilizan SMT bidireccional (con subprocesamiento múltiple de doble dominio).
Intel Xeon Phi tiene SMT de 4 vías (con subprocesamiento múltiple multiplexado en el tiempo) con subprocesos basados en hardware que no se pueden deshabilitar, a diferencia del Hyper-Threading normal. [8] El Intel Atom , lanzado por primera vez en 2008, es el primer producto de Intel que presenta SMT de 2 vías (comercializado como Hyper-Threading) sin admitir reordenamiento de instrucciones, ejecución especulativa o cambio de nombre de registros. Intel reintrodujo Hyper-Threading con la microarquitectura Nehalem , después de su ausencia en la microarquitectura Core .
La microarquitectura AMD Bulldozer FlexFPU y la caché L2 compartida son multiproceso, pero los núcleos enteros en el módulo son de un solo subproceso, por lo que es solo una implementación SMT parcial. [9] [10]
La microarquitectura AMD Zen tiene SMT de 2 vías.
La arquitectura VISC [11] [12] [13] [14] utiliza la capa de software virtual (capa de traducción) para enviar un único hilo de instrucciones al front-end global que divide las instrucciones en threadlets de hardware virtual que luego se envían a núcleos virtuales separados. Estos núcleos virtuales pueden enviarlos a los recursos disponibles en cualquiera de los núcleos físicos. Múltiples núcleos virtuales pueden insertar threadlets en el búfer de reordenación de un único núcleo físico, que puede dividir instrucciones parciales y datos de múltiples threadlets a través de los puertos de ejecución al mismo tiempo. Cada núcleo virtual realiza un seguimiento de la posición de la salida relativa. Esta forma de multihilo puede aumentar el rendimiento de un solo hilo al permitir que un solo hilo use todos los recursos de la CPU. La asignación de recursos es dinámica en un nivel de latencia de ciclo casi único (1 a 4 ciclos según el cambio en la asignación según las necesidades de la aplicación individual). Por lo tanto, si dos núcleos virtuales compiten por los recursos, existen algoritmos apropiados para determinar qué recursos se asignarán y dónde.
Dependiendo del diseño y la arquitectura del procesador, la ejecución simultánea de múltiples subprocesos puede reducir el rendimiento si alguno de los recursos compartidos constituye un cuello de botella para el rendimiento. [15] Los críticos sostienen que es una carga considerable para los desarrolladores de software tener que probar si la ejecución simultánea de múltiples subprocesos es buena o mala para su aplicación en diversas situaciones e insertar lógica adicional para desactivarla si reduce el rendimiento. Los sistemas operativos actuales carecen de llamadas API convenientes para este propósito y para evitar que los procesos con diferentes prioridades se apropien de recursos entre sí. [16]
También existe un problema de seguridad con ciertas implementaciones de subprocesamiento múltiple simultáneo. El hiperprocesamiento de Intel en los procesadores basados en NetBurst tiene una vulnerabilidad a través de la cual es posible que una aplicación robe una clave criptográfica de otra aplicación que se ejecuta en el mismo procesador al monitorear el uso de su caché. [17] También existen sofisticados exploits de aprendizaje automático para la implementación de hiperprocesamiento múltiple que se explicaron en Black Hat 2018. [ 18]