El multithreading simultáneo, acrónimo de SMT (simultaneous multithreading), es una técnica para mejorar la eficiencia global de las CPU superescalares con multithreading de hardware. A diferencia de un procesador que ejecuta un solo hilo por núcleo, el SMT permite que varios hilos de ejecución independientes compartan el mismo núcleo y aprovechen mejor los recursos que ofrecen las arquitecturas informáticas modernas.
El concepto de multithreading es similar al de multitarea, pero se implementa a nivel de hilo de ejecución en los procesadores superescalares modernos. Su objetivo no es que todos los hilos avancen exactamente al mismo ritmo, sino aumentar el rendimiento total del chip y reducir los periodos en los que parte del hardware queda sin uso.
Cómo funciona el SMT
En un núcleo con SMT, el procesador mantiene el estado de más de un hilo al mismo tiempo y puede emitir instrucciones de distintos hilos dentro del mismo ciclo. Cuando un hilo queda esperando datos de memoria, su hueco puede ser aprovechado por otro hilo que sí tenga trabajo listo para ejecutar.
Esto resulta especialmente útil en situaciones como fallos de caché, dependencias entre instrucciones, ramas mal predichas o esperas largas de memoria. En todos esos casos, una parte del núcleo puede quedar infrautilizada si solo se ejecuta un hilo. El SMT intenta llenar esos huecos con instrucciones procedentes de otros hilos para aumentar el rendimiento global.
No obstante, SMT no duplica todo el procesador. Comparte muchas estructuras internas, como ciertas unidades de ejecución, colas de instrucciones y parte de la lógica de control. Por eso, su eficacia depende mucho del tipo de carga de trabajo: en algunos programas ofrece una mejora clara, mientras que en otros la ganancia es pequeña o incluso puede reducir el rendimiento si los hilos compiten demasiado por los mismos recursos.
Formas de aumentar el paralelismo en un chip
En el diseño de procesadores, hay dos formas de aumentar el paralelismo en el chip con menos requisitos de recursos:
- Técnica superescalar: que trata de aumentar el paralelismo a nivel de instrucción (ILP) ejecutando múltiples instrucciones al mismo tiempo (denominado: simultáneamente); despachando "simultáneamente" instrucciones (denominado: despacho de instrucciones) a múltiples unidades de ejecución redundantes construidas dentro del procesador.
- Técnica de multihilo a nivel de chip (CMT): utiliza el paralelismo a nivel de hilo (TLP) para ejecutar instrucciones de múltiples hilos dentro de un chip de procesador al mismo tiempo.
Tipos de multithreading y relación con los multinúcleo
Hay muchas maneras de soportar más de un hilo dentro de un chip, a saber:
- Multithreading intercalado (IMT) : Emisión intercalada de múltiples instrucciones de diferentes hilos, también denominada multithreading temporal. Puede dividirse en multithreading de grano fino o multithreading de grano grueso en función de la frecuencia de las emisiones intercaladas. El multithreading de grano fino emite instrucciones para diferentes hilos después de cada ciclo, mientras que el multithreading de grano grueso sólo cambia para emitir instrucciones de otro hilo cuando el hilo que se está ejecutando en ese momento provoca algunos eventos de larga latencia (como un fallo de página, etc.). El multithreading de grano grueso es más común para un menor cambio de contexto entre hilos. Para los procesadores con un pipeline por núcleo, el multithreading intercalado es la única forma posible, porque sólo puede emitir hasta una instrucción por ciclo.
- Multihilo simultáneo (SMT): Emitir varias instrucciones de varios hilos en un ciclo. El procesador debe ser superescalar para hacerlo. En la práctica, esto permite que un núcleo mezcle instrucciones procedentes de distintos hilos cuando tiene huecos de ejecución disponibles.
- Multiprocesamiento a nivel de chip (CMP o procesador multinúcleo): integra dos o más procesadores superescalares en un chip, cada uno de los cuales ejecuta hilos de forma independiente.
- Cualquier combinación de IMT/SMT/CMP
Diferencias clave entre IMT, SMT y CMP
La forma más sencilla de distinguir estas técnicas es fijarse en dos cosas: cuántas instrucciones puede emitir el procesador en un ciclo y de cuántos hilos proceden esas instrucciones. En el IMT, el núcleo alterna entre hilos de forma intercalada; en el SMT, un mismo núcleo superescalar puede emitir varias instrucciones de varios hilos en un solo ciclo; y en el CMP, el paralelismo se consigue porque hay varios núcleos físicos dentro del chip, cada uno con su propia ejecución independiente.
En otras palabras, el IMT busca aprovechar mejor un núcleo cuando solo puede emitir pocas instrucciones por ciclo; el SMT intenta llenar huecos de ejecución dentro de un núcleo más complejo; y el CMP aumenta el paralelismo total añadiendo más núcleos al procesador. Por eso, estas técnicas no son excluyentes y, en muchos diseños modernos, se combinan para obtener un mejor equilibrio entre rendimiento, consumo y coste de fabricación.
Ventajas y limitaciones del SMT
- Mejor uso del hardware: reduce los tiempos en los que las unidades del núcleo quedan ociosas.
- Más rendimiento por núcleo: puede aumentar el número de instrucciones completadas por ciclo en cargas adecuadas.
- Coste relativamente contenido: ofrece una mejora interesante sin necesidad de duplicar todo el núcleo.
- Depende de la aplicación: si los hilos compiten por los mismos recursos, la mejora puede ser pequeña.
- No sustituye a más núcleos físicos: SMT mejora el aprovechamiento del procesador, pero no equivale a un procesador con más núcleos reales.
Por este motivo, el SMT suele combinarse con otras técnicas de diseño, como ejecución fuera de orden, predicción de saltos más precisa y jerarquías de caché eficientes. En conjunto, estas soluciones permiten que las CPU modernas mantengan un buen nivel de rendimiento incluso cuando una parte de la ejecución se detiene temporalmente.