@
tasadarf es mi tocayo, yo soy Tassadar xd
Así a groso modo, si has leído el enlace que te puse, lo que hace el SMT es aprovechar los momentos en los que se produce un "pipeline stall" para procesar otro hilo (otra instrucción de otro hilo) en esa etapa del pipeline, aprovechando así mejor el procesador, pues realmente no tiene porque tomar una instrucción y estar ocupado hasta que acaba de procesarla, sino que internamente está procesando dos instrucciones diferentes.
A lo que comenta el compañero @
Megaman, por lo que yo se (corregidme si me equivoco), la paralelización de instrucciones, que es algo que se usa desde los primeros sistemas operativos multitarea, lo que hace es crear una pila de instrucciones de forma que en lugar de ejecutar un programa entero y cuando acaba ejecutar otro (procesamiento nonotarea), lo que se hace es ejecutar varios programas a la vez, la sensación que tiene el usuario es que todo va al mismo tiempo, pero internamente la realidad es que se crea una pila de instrucciones que se va procesando de determinada manera, dando prioridad a unas instrucciones u otras (LIFO, FIFO...)…
Es algo complicado de explicar, pero a donde quiero llegar es que en un procesador (o núcleo más bien) sin SMT, es una realidad que vas ejecutando varios programas a la vez, pero
el punto importante es que las instrucciones se ejecutan de una en una, vas procesando diferentes instrucciones de diferentes programas, pero desde que entra en el pipeline una instrucción hasta que sale, esa instrucción ha de pasar por todas las etapas, y sin existir ejecución de otras instrucciones en medio de ésta. O sea, los tiempos muertos que se producen por los "pipeline stall" se quedan muertos, y en estos tiempos esa etapa del pipeline está rascándose la barriga (esto se explica bien en el artículo).
El SMT permite aprovechar esos atasques del pipeline para "colar" otra instrucción en el núcleo, de forma que mantienes todas las etapas del pipeline aprovechadas, sacándole mucho más jugo al hardware. Siguiendo el ejemplo que usé en el artículo, seria equivalente a que en la fábrica, en lugar de tener la cadena de montaje de coches de forma que van entrando los coches de uno en uno, es posible estar montando dos coches al mismo tiempo:
Imagina que en la parte de la fábrica hay un problema con el montaje del chasis del coche. Sin SMT esto crea un pipeline stall que hace perder tiempo a todas las fases del pipeline que vienen después, porque claro, si el chasis no está montado, el equipo siguiente no puede pintarlo, y el otro equipo no puede poner el motor....
Con SMT lo que hacemos es que si en la primera fase hay un problema con el chasis del coche, tenemos otro coche al que únicamente se le ha puesto el chasis y está pendiente de pintarlo, así que en lugar de dejar el equipo de pintura (la etapa dos del pipeline) de brazos cruzados, se pone a pintar otro coche mientras que el equipo de montaje de chasis termina de montar el otro.
La implementación de Intel del SMT (llamada comercialmente Hyperthreading) permite aumentar el redimiendo hasta un 30%, y el SMT de los Ryzen hasta un 40%, así que es algo bastante interesante, pues no requiere una inversión demasiado grande en cuanto a lógica (transistores) y espacio en el silicio, pero consigue una mejora sustancial.
Un saludo