Multihilo simultáneo

El Intel Pentium 4 fue el primer procesador de sobremesa moderno en implementar el multihilo simultáneo, a partir del modelo de 3,06 GHz lanzado en 2002, y desde entonces introducido en varios de sus procesadores. Intel denomina a esta funcionalidad Hyper-Threading Technology, y proporciona un motor básico de dos hilos SMT. Intel afirma que la velocidad mejora hasta un 30% en comparación con un Pentium 4 idéntico sin SMT. La mejora de rendimiento que se observa depende mucho de la aplicación; 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 Hyper-threading está activado. Esto se debe a que el sistema de repetición del Pentium 4 ocupa valiosos recursos de ejecución, aumentando la contención por recursos como el ancho de banda, las cachés, los TLB, las entradas de búfer de reordenación, igualando los recursos del procesador entre los dos programas, lo que añade una cantidad variable de tiempo de ejecución. El núcleo del Pentium 4 Prescott ganó una cola de repetición, que reduce el tiempo de ejecución necesario para el sistema de repetición. Esto es suficiente para superar completamente ese golpe de rendimiento.

Los últimos diseños de la arquitectura MIPS de Imagination Technologies incluyen un sistema SMT conocido como «MIPS MT». MIPS MT ofrece tanto elementos de procesamiento virtual de gran peso como microhilos de hardware más ligeros. RMI, una empresa con sede en Cupertino, es el primer proveedor de MIPS que ofrece un SOC de procesador basado en ocho núcleos, cada uno de los cuales ejecuta cuatro hilos. Los hilos pueden ejecutarse en modo de grano fino, lo que permite ejecutar un hilo diferente en cada ciclo. También se pueden asignar prioridades a los hilos. Las CPUs 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 multinúcleo (MCM) de cuatro u ocho núcleos, y cada núcleo incluye un motor SMT de dos hilos. La implementación de IBM es más sofisticada que las anteriores, porque puede asignar una prioridad diferente a los distintos hilos, es más fina y el motor SMT puede activarse y desactivarse dinámicamente, 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 del multithreading por hardware generalmente disponible. En 2010, IBM lanzó sistemas basados en el procesador POWER7 con ocho núcleos con cuatro hilos inteligentes simultáneos cada uno. Esto cambia el modo de roscado entre un hilo, dos hilos o cuatro hilos en función del número de hilos de proceso que se estén programando en ese momento. Esto optimiza el uso del núcleo para obtener el mínimo tiempo de respuesta o el máximo rendimiento. IBM POWER8 tiene 8 hilos simultáneos inteligentes por núcleo (SMT8).

IBM z13 tiene dos hilos por núcleo (SMT-2).

Aunque mucha gente informó de que el UltraSPARC T1 de Sun Microsystems (conocido como «Niagara» hasta su lanzamiento el 14 de noviembre de 2005) y el ya desaparecido procesador con nombre en clave «Rock» (anunciado originalmente en 2005, pero tras muchos retrasos cancelado en 2010) son implementaciones de SPARC centradas casi por completo en la explotación de las técnicas SMT y CMP, Niagara no utiliza realmente SMT. Sun se refiere a estos enfoques combinados como «CMT», y al concepto general como «Throughput Computing». Niagara tiene ocho núcleos, pero cada uno de ellos sólo tiene un pipeline, por lo que en realidad utiliza el multithreading de grano fino. A diferencia del SMT, en el que las instrucciones de varios hilos comparten la ventana de emisión en cada ciclo, el procesador utiliza una política de round robin para emitir instrucciones del siguiente hilo 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 un pipeline.

El SPARC T3 de Oracle Corporation tiene ocho hilos de grano fino por núcleo, el SPARC T4, el SPARC T5, el SPARC M5, el M6 y el M7 tienen ocho hilos de grano fino por núcleo de los cuales dos pueden ejecutarse simultáneamente.

Fujitsu SPARC64 VI tiene multihilos verticales de grano grueso (VMT) SPARC VII y más nuevos tienen SMT de 2 vías.

Intel Itanium Montecito utiliza multihilos de grano grueso y Tukwila y más nuevos utilizan SMT de 2 vías (con multihilos de doble dominio).

El Intel Xeon Phi tiene SMT de 4 vías (con multihilo multiplexado en el tiempo) con hilos basados en hardware que no se pueden desactivar, a diferencia del Hyperthreading normal. El Intel Atom, lanzado en 2008, es el primer producto de Intel que cuenta con SMT de 2 vías (comercializado como Hyper-Threading) sin soporte para la reordenación de instrucciones, la ejecución especulativa o el renombramiento de registros. Intel reintrodujo Hyper-Threading con la microarquitectura Nehalem, tras su ausencia en la microarquitectura Core.

La microarquitectura Bulldozer de AMD FlexFPU y la caché L2 compartida son multihilo, pero los núcleos enteros del módulo son de un solo hilo, por lo que sólo es una implementación SMT parcial.

La microarquitectura Zen de AMD tiene SMT de 2 vías.

La arquitectura VISC utiliza la capa de software virtual (capa de traducción) para enviar un único hilo de instrucciones al Global Front End, que divide las instrucciones en hilos de hardware virtuales que luego se envían a núcleos virtuales separados. Estos núcleos virtuales pueden entonces enviarlos a los recursos disponibles en cualquiera de los núcleos físicos. Varios núcleos virtuales pueden enviar threadlets al buffer de reordenación de un único núcleo físico, que puede dividir instrucciones parciales y datos de varios threadlets a través de los puertos de ejecución al mismo tiempo. Cada núcleo virtual lleva la cuenta de la posición de la salida relativa. Esta forma de multithreading puede aumentar el rendimiento de un solo thread al permitir que un solo thread utilice todos los recursos de la CPU.La asignación de recursos es dinámica a un nivel de latencia de casi un ciclo (1-4 ciclos dependiendo del cambio de asignación según las necesidades individuales de la aplicación. Por lo tanto, si dos núcleos virtuales compiten por los recursos, existen algoritmos apropiados para determinar qué recursos deben asignarse y dónde.